J'ai essayé de comprendre comment écrire un npm script
qui aboutira au lancement de l'application dans le navigateur de l'utilisateur sans que celui-ci ait à ouvrir manuellement le navigateur et à accéder à localhost:1234
.
En ce moment, mon script se lit comme suit:
"start": "npm run build && npm run dev",
"build": "npm run clean && npm run mkdir && npm run build:html && npm run build:css && npm run build:js",
"dev": "webpack-dev-server --inline --hot --content-base build --history-api-fallback",
Vouloir ajouter "open": <some code here>,
Ainsi, lorsque quelqu'un accède à GitHub et clone ou retire de mon référentiel, il reçoit les instructions relatives à l'exécution de l'application. Je pensais simplement que l’automatisation serait une belle addition.
Quelqu'un sait comment cela est possible? Je suis sûr que c'est le cas et je pense que cela a quelque chose à voir avec l'appel d'une commande en bash. Merci d'avance pour l'aide!
Cela peut être réalisé en incluant quelques paquets supplémentaires dans votre projet.
Installer serveur http :
$ npm install http-server --save-dev
et simultanément :
$ npm install concurrently --save-dev
Ajoutez le script open
suivant à package.json
:
"scripts": {
"start": "npm run open",
"open": "concurrently \"http-server -a localhost -p 1234\" \"open http://localhost:1234/build\""
}
start
sera en fait défini comme suit pour inclure les tâches que vous avez actuellement:
"start": "npm run build && npm run dev && npm run open",
Le code dans le script open
ci-dessus qui se lit comme suit:
open http://localhost:1234/build
... suppose que la tâche build
que vous avez définie précédemment génère un index.html
dans un dossier build
. Si le nom du fichier est différent, vous devrez le définir. Par exemple.
open http://localhost:1234/build/the_html_file_name.html
Vous devrez peut-être ajouter un délai entre le lancement du serveur et l'ouverture du fichier, juste pour attendre un peu jusqu'à ce que le serveur démarre. Si c'est le cas, installez également sleep-ms :
$ npm install sleep-ms --save-dev
et remplacez le script open
par:
"open": "concurrently \"http-server -a localhost -p 1234\" \"sleepms 1000 && open http://localhost:1234/build\""
Malheureusement, la commande open n'est pas prise en charge sur plusieurs plates-formes. Pour résoudre ce problème, recherchez opener ou opn-cli et remplacez la commande en conséquence.
Cependant, les deux packages (opener
et opn-cli
) utilisent Object.assign () so ne fonctionneront pas dans les anciennes versions de nodejs.
Edit: Pour ouvrir une fenêtre de navigateur après le démarrage du serveur, http-server
accepte désormais l'option -o
. Ceci peut être utilisé à la place des packages opener
ou opn-cli
.
Pour Webpack users: OpenBrowserPlugin fait le tour aussi!
Installer une dépendance:
npm install open-browser-webpack-plugin --save-dev
Et add ceci dans le fichier de configuration webpack:
var OpenBrowserPlugin = require('open-browser-webpack-plugin');
...
plugins: [
new OpenBrowserPlugin({ url: 'http://localhost:3000' })
]
Vous avez juste besoin :
$ start http: // localhost: 124
J'ai testé sous Windows 10.)
Les scripts dont vous avez besoin sont:
"open": "start http: // localhost: 1234 "
Mais vous devez faire attention à ce que, dans Windows 10, vous devez placer "start http: // localhost: 1234 " avant que votre serveur node.js ne démarre.
J'espère vous aider.
Si vous utilisez Webpack Il existe un autre moyen de le faire en utilisant le webpack-dev-server
npm install webpack-dev-server --save-dev
Ensuite, lancez webpack-dev-server
ou configurez npm script
comme ceci:
"start": "webpack-dev-server"
Ensuite, accédez à http://localhost:8080
Il sert par défaut des fichiers du répertoire en cours. Si vous voulez servir des fichiers depuis un autre répertoire, vous devez utiliser l'option --content-base
comme ceci:
webpack-dev-server --content-base thefolderyouwanttoserve/
Plus d'informations sur webpack-dev-server ici dans la documentation officielle du webpack.