【问题标题】:npm script runs default script even if parameter is different即使参数不同,npm 脚本也会运行默认脚本
【发布时间】:2016-10-11 13:57:09
【问题描述】:

在我的 package.json 中,我有这些脚本:

"scripts": {
    "do-build": "ENV=DEV node ./src/setEnvironment.js",
    "do-build:prod": "ENV=PROD node ./src/setEnvironment.js",
    "do-build:dev": "ENV=DEV node ./src/setEnvironment.js"
  }

所以,我假设当我运行npm run do-build 时它会运行"do-build": "ENV=DEV node ./src/setEnvironment.js",而当我运行npm run do-build --prod 时它会执行"do-build:prod": "ENV=PROD node ./src/setEnvironment.js",但它总是执行默认的do-build 脚本("do-build": "ENV=DEV node ./src/setEnvironment.js")。我不确定为什么会这样?

【问题讨论】:

    标签: javascript node.js npm-scripts


    【解决方案1】:

    npm 不支持影响应该执行哪个脚本的 CLI 参数。因此npm run do-build:prod 将执行生产构建任务。

    【讨论】:

      【解决方案2】:

      这不是 npm 脚本的工作方式。如果你想运行 do-build:prod 你必须这样做:npm run do-build:prod

      如果你愿意,你的 npm 脚本可以接受参数,例如,如果你有这个:

        "scripts": {
          "foo": "echo $1"
        }
      

      您可以像这样运行它:npm run foo bar,您的脚本将接收 bar 作为第一个命令行参数。

      为了对命令行选项有更丰富的支持,我建议您使用更丰富的任务运行器,例如 gulp 或 grunt,而不是使用 npm 脚本。

      【讨论】:

      • 如果我使用这个 npm run do-build prod 我会在 process.argv values 数组中得到 prod,但只有在我指向的节点 bin 目录路径和 .js 文件路径之后。也许你可以帮助我理解为什么会这样以及如何防止这些路径进入这个数组?
      • 你无法阻止这些路径出现在 argv 中,这就是 node 的设计原理nodejs.org/docs/latest/api/process.html#process_process_argv
      猜你喜欢
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 2022-07-21
      • 2018-05-17
      • 2020-07-01
      • 2022-08-10
      相关资源
      最近更新 更多