【问题标题】:npm sub script with command line parameters带有命令行参数的 npm 子脚本
【发布时间】:2018-07-22 00:40:45
【问题描述】:

我有一些看起来像这样的 npm 脚本:

"scripts": {
    "exec:dev": "export NODE_ENV=development && npm run exec",
    "exec:stage": "export NODE_ENV=stage && npm run exec",
    "exec:prod": "export NODE_ENV=production && npm run exec",
    "exec": "node myapp.js"
}

我想将一些命令行参数传递给myapp.js,但这不起作用:

npm run exec:prod -- -a 123 -b 456

这显然是因为exec:prod 脚本正在调用exec 脚本并且显然没有传递命令行参数。有没有办法在保持嵌套脚本调用的同时实现这一点?

【问题讨论】:

    标签: npm command-line


    【解决方案1】:

    要明确告诉exec 脚本传递它获取的参数,请包含另一个--

    代替:

    npm run exec:prod -- -a 123 -b 456
    

    尝试:

    npm run exec:prod -- -- -a 123 -b 456
    

    • 第一个双破折号告诉exec:dev 脚本,“这些参数 不适合你,请将它们传递给 exec 脚本"。

    • 第二个双破折号告诉exec 脚​​本,“这些参数不是 给你,把它们传递给node myapp.js"。

    【讨论】:

      【解决方案2】:

      如果您想保持通过 CLI 输入的 npm run 命令与您的问题相同。 (即避免向其添加另一个 npm 特殊选项 (--),根据 @MikePatrick 的回答)。

      将您的 npm-scripts 改为以下内容:

      "scripts": {
          "exec:dev": "export NODE_ENV=development && npm run exec --",
          "exec:stage": "export NODE_ENV=stage && npm run exec --",
          "exec:prod": "export NODE_ENV=production && npm run exec --",
          "exec": "node myapp.js"
      }
      

      注意: npm 特殊选项 (--) 添加到前三个脚本的末尾。


      演示

      出于演示目的,假设myapp.js 如下:

      myapp.js

      const args = (process.argv.slice(2));
      const nodeEnv = process.env.NODE_ENV;
      
      console.log(nodeEnv);
      console.log(args);
      

      测试:

      • 运行 npm run exec:dev -- -a 123 -b 456 打印:

        development

        [ '-a', '123', '-b', '456' ]

      • 运行 npm run exec:stage -- -a 123 -b 456 打印:

        stage

        [ '-a', '123', '-b', '456' ]

      • 运行 npm run exec:prod -- -a 123 -b 456 打印:

        production

        [ '-a', '123', '-b', '456' ]


      更多信息

      npm-run-script 的文档描述了 npm 特殊选项 (--),如下所示:

      ... getopt 使用特殊选项-- 来分隔选项的结尾。 npm 会将-- 之后的所有参数直接传递给您的脚本...这些参数只会传递给npm run 之后指定的脚本,而不是任何前置或后置脚本。

      【讨论】:

        猜你喜欢
        • 2017-07-18
        • 2010-12-12
        • 2020-12-31
        • 1970-01-01
        • 2012-05-26
        • 2017-08-19
        • 2012-07-19
        相关资源
        最近更新 更多