J'ai la structure de répertoire suivante:
Et mon package.json
ressemble à ça:
{
"name": "personal_site",
"version": "1.0.0",
"description": "My personal website.",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"node-sass": "node-sass --output-style compressed --include-path node_modules/bourbon/app/assets/stylesheets/ --include-path node_modules/bourbon-neat/app/assets/stylesheets/ 'src/scss/styles.scss' 'dist/css/bundle.min.css'",
"html-minifier": "html-minifier --collapse-whitespace --remove-comments --remove-attribute-quotes -o 'dist/index.html' 'src/index.html'",
"imagemin": "imagemin src/images dist/images",
"serve": "http-server ./dist"
},
"author": "Dean Gibson",
"license": "ISC",
"dependencies": {
"bourbon": "^4.2.6",
"bourbon-neat": "^1.7.4",
"normalize-scss": "^4.0.3"
},
"devDependencies": {
"html-minifier": "^1.3.0",
"http-server": "^0.9.0",
"node-sass": "^3.4.2"
}
}
Donc, tout d'abord, je dois exécuter chacun de ces scripts individuellement, par exemple npm run node-sass
ou npm run html-minifier
etc. Ce que je souhaiterais idéalement, c'est d'exécuter npm serve
qui fera ce qui suit:
src
et exécutez les scripts respectifs à mesure que les fichiers changent, par exemple node-sass
etc..Comment puis-je résoudre au mieux ce problème?
Vous pouvez regarder vos répertoires en utilisant nodemon
.
Une solution pour vous consiste à créer trois scripts de surveillance, un pour chaque tâche:
watch:node-sass
,watch:html-minifier
, etwatch:imagemin
.Ensuite, ayez un script central watch
commençant les trois:
{
"name": "personal_site",
"version": "1.0.0",
"description": "My personal website.",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"node-sass": "node-sass --output-style compressed --include-path node_modules/bourbon/app/assets/stylesheets/ --include-path node_modules/bourbon-neat/app/assets/stylesheets/ 'src/scss/styles.scss' 'dist/css/bundle.min.css'",
"html-minifier": "html-minifier --collapse-whitespace --remove-comments --remove-attribute-quotes -o 'dist/index.html' 'src/index.html'",
"imagemin": "imagemin src/images dist/images",
"serve": "http-server ./dist",
"watch:node-sass": "nodemon -e scss -x \"npm run node-sass\"",
"watch:html-minifier": "nodemon -e html -x \"npm run html-minifier\"",
"watch:imagemin": "nodemon --watch src/images -x \"npm run imagemin\"",
"watch": "npm run watch:node-sass & npm run watch:html-minifier & npm run watch:imagemin"
},
"author": "Dean Gibson",
"license": "ISC",
"dependencies": {
"bourbon": "^4.2.6",
"bourbon-neat": "^1.7.4",
"normalize-scss": "^4.0.3"
},
"devDependencies": {
"html-minifier": "^1.3.0",
"http-server": "^0.9.0",
"node-sass": "^3.4.2"
}
}
Lisez aussi: Comment utiliser npm comme outil de construction .
Je conseille onchange
, voir this passe-partout.
Par exemple,
"watch:css": "onchange 'src/scss/*.scss' -- npm run build:css",
ou
"watch:js": "onchange 'src/js/*.js' -- npm run build:js",
Pas besoin de Grunt ou Gulp!
Les outils les plus largement adoptés pour ce cas scripté sont d'aller avec gulp ou grognement. Ce sont des outils que vous rencontrerez très souvent. Vous pouvez également trouver leurs bibliothèques grunt/gulp pour vos minify/concat/copy/imagemin, ainsi que les bibliothèques watcher afin qu'elles changent lorsque vous apportez des modifications au code. Nodemon/forever/pm2 a également la capacité de regarder pour redémarrer votre serveur http