【问题标题】:How to chain multiple commands in npm package.json scripts如何在 npm package.json 脚本中链接多个命令
【发布时间】:2022-08-17 08:10:16
【问题描述】:

我正在尝试在我的 package.json 文件中创建一个脚本,该脚本将启动我的 nodemon 应用程序,然后触发一个 gulp sass 手表

目前,我可以通过运行一个启动 nodemon 的npm launch 来做到这一点,然后在一个单独的终端窗口中我可以运行gulp watch 从我的 gulp 文件中触发 sass 监视。

我想在 package.json 中创建一个脚本命令来完成这两项工作——这可能吗?

包.json

  \"scripts\": {
    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",
    \"start\": \"nodemon app.js\",
    \"launch\": \"nodemon app.js && gulp watch\"
  },

gulpfile.js

const { src, dest, watch } = require(\"gulp\");
const sass = require(\'gulp-sass\')(require(\'node-sass\'));

function generateCSS(cb) {
    src(\'./sass/**/*.scss\')
        .pipe(sass().on(\'error\', sass.logError))
        .pipe(dest(\'public/css\'));
    cb();
}

function watchFiles(cb) {
    watch(\'sass/**/**.scss\', generateCSS);
}

exports.css = generateCSS;
exports.watch = watchFiles;

编辑:受@cmgchess 的回答启发,请在下面查看对我有用的答案

  • 没有快照,这有效!根据该 SO post \'&&\' 顺序执行命令,而 \'&\' 并行执行命令。所以也许是因为 nodemon 启动但没有结束,所以在使用&& 时它永远不会执行gulp watch。 @cmgchess 如果您想将此作为答案提交,我很乐意确认并投票
  • 我认为既然您已经在链接中找到了答案,那么如果我不重新发布会更好。无论如何,您可以用对您有用的方法来回答您自己的问题

标签: javascript node.js sass gulp


【解决方案1】:

您应该能够使用npm-run-all 包及其run-p 命令并排执行多个脚本:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js",
    "watch": "gulp watch",
    "launch": "run-p start watch"
},

然后你可以这样做:

npm launch

【讨论】:

  • @JKRishe 我认为这肯定会起作用,但是在阅读了上面的@cmgchess 评论后,我想知道使用& 是否更适合我的用例,因为我的脚本相对简单。无论哪种方式,我都会将此包保持在我的上限,谢谢 - 似乎它对于复杂的设置非常有用!
【解决方案2】:

只需使用&&

package.json

"build": "npm run base && npm run utilities:global && npm run utilities:unstyled && npm run utilities:styled && npm run components && npm run merge:unstyled && npm run merge:styled && npm run rtl && npm run prejss && npm run themes && npm run full",

【讨论】:

  • 好吧,我也有这个想法,实际上我原来的帖子中的脚本对象中的第 3 行当前有 &&,但是它并没有启动 gulp 监视,只有 nodemon 服务
【解决方案3】:

根据 cmets 中的@cmgchess 答案,事实证明使用双 & 号顺序运行命令。但是,也可以选择使用单个 & 符号,它将并行运行它们。在这种情况下,这就是我需要的:

"launch": "nodemon app.js & gulp watch"

编辑:好的,我第一次运行启动它工作正常。然而,随后的发射失败了。我现在让它在多次启动后再次工作,我还需要做的是切换命令的顺序:

"launchreverse": "gulp watch & nodemon app.js"

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 2019-08-15
    • 2018-03-31
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多