【问题标题】:npm run: Executes another (incorrect) scriptnpm run:执行另一个(不正确的)脚本
【发布时间】:2019-02-14 04:23:48
【问题描述】:

这是我的package.jsonscripts 部分:

"scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "compile-prebuild": "tsc -p prebuild-tsconfig.json --pretty",
    "prebuild": "ts-node --project PreBuild/tsconfig.json PreBuild/prebuild.ts",

    "testJs": "node test.js",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "extract-i18n": "ng xi18n Paradise --i18n-format=xlf2 --output-path=i18n --i18n-locale=en && ng run Paradise:xliffmerge"
},

奇妙的是当我尝试npm run buildnpm run build -- --prod 时,另一个脚本(prebuild)被执行

> npm run build -- --prod

> project@0.1.1 prebuild ...
> ts-node --project PreBuild/tsconfig.json PreBuild/prebuild.ts

现在,如果我将 prebuild 脚本重命名为 pre-build(在 package.json 中),一切都会好起来的:

> npm run build -- --prod

> project@0.1.1 build ...
> ng build "--prod"
...

现在,如果我恢复回来,问题又出现了!


> npm -v
6.7.0

【问题讨论】:

    标签: npm npm-scripts


    【解决方案1】:

    这是“正确的”,因为它是 npm 的记录行为 - 请参阅 here

    此外,可以通过运行npm run-script <stage> 执行任意脚本。具有匹配名称的 pre 和 post 命令也将针对这些命令运行(例如 premyscriptmyscriptpostmyscript)。

    一般来说,脚本可以以prepost 为前缀来在脚本之前或之后执行操作。

    在选择 npm 脚本名称时,最好将前缀 prepost 视为保留(当然,除非您希望它们始终在主要任务之前或之后运行)。

    【讨论】:

      【解决方案2】:

      pre 和 post 钩子由 npm 自动运行。如果你在 package.json 中定义了 prebuild,npm 会在你要求它运行 build 时自动运行它。 post hook 也是如此。

      您可以在此处查看文档。 https://docs.npmjs.com/misc/scripts

      【讨论】:

        猜你喜欢
        • 2018-04-28
        • 2016-04-07
        • 2021-04-13
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        相关资源
        最近更新 更多