好的,我现在得到了这么多,我将把它作为一个答案,但我认为这个问题是非常开放的!我认为无论如何您都必须根据要求进行更改。基本上,如果它有效,那么不要担心。
有多种解决方案,例如npm-run-all 或concurrently,但我认为"run-both": "npm run build-css & npm run watch-css" 之类的第三个脚本在大多数情况下都可以,如果您记住& 不是跨平台甚至不是跨shell (如 windows cmd vs powershell)。所以我想说,如果你在一个团队中工作,那么添加另一个开发依赖项可能会更容易。
但我会为pm2 鸣笛,我认为它在生产和开发中都非常有用。生态系统文件特别有用。我也认为 pm2 完全取代了 nodemon。并不是说 nodemon 不好,而是 pm2 非常适合多个进程。以下是我的一些 npm 脚本:
"winsrv": "pm2 flush & pm2 reload server/ecosystem-win.json & pm2 logs",
"winprod": "webpack --config ./webpack.config.js & npm run winsrv",
"windev": "set NODE_ENV=development webpack --config webpack.dev.config.js"
最后,我要补充一点,npm 脚本中的 post/pre 挂钩非常有用。为三个脚本运行一个命令:
"preprod": "./preprod.sh", // Makes backup of old files, changes symlink to the backup
"prod": "webpack --config ./webpack.config.js && pm2 flush && pm2 reload server/ecosystem-production.json",
"postprod": "./postprod.sh", // check files exist and relinks public to the new build
抱歉耽搁了,我分心了,遇到了一些障碍。
我决定尝试 node-sass 编程 api,我不确定它有多聪明,但我学到了一两件事。
buildcss.js:
var sass = require("node-sass");
var fs = require("fs");
sass.render({file: "styles.scss"}, (err, results) => {
if (err) { console.log(err); }
fs.writeFile("styles.css", results.css, err => console.log);
console.log('scss -> css complete!');
});
伪造的 server.js
console.log("server.js...");
setInterval(function() {
console.log("interval that prevents our so called server from exiting" );
}, 1000 * 60 * 60);
ecosystem.json(在更改时重新启动 scss 脚本。嗯...)
{
"apps": [
{
"name": "My Server",
"script": "server.js",
"watch" : ["server.js"]
},
{
"name": "SCSS to CSS",
"script": "buildcss.js",
"watch": ["styles.scss"],
"autorestart": false
}
]
}
还有 package.json
...
"scripts": {
"start": "pm2 logs && pm2 reload ecosystem.json && pm2 logs --out"
},
npm start
我想补充一点,我通常通过 webpack 处理我的 scss 编译,并不能真正说明这里使用的过程(但它似乎工作得很好!)。