每当我运行npm install <package>
它时,它都会安装包,但它会自动运行prepare
脚本。
值得一提的是,我已经检查过package.jsonpostinstall
中没有脚本。
每当我运行npm install <package>
它时,它都会安装包,但它会自动运行prepare
脚本。
值得一提的是,我已经检查过package.jsonpostinstall
中没有脚本。
来自https://docs.npmjs.com/misc/scripts:
prepare:在打包和发布包之前运行,在本地 npm install 上运行,不带任何参数(见下文)。这是在 prepublish 之后运行,但在 prepublishOnly 之前运行。
从 NPM v5 开始,prepare
脚本在你运行时执行npm install
其他答案很好,但对于一些额外的上下文,这是为了支持一个工作流,您可以在其中使用 devDependencies 为您的项目构建资产或其他生成的内容。
例如,假设您想使用 node-sass(CSS 预处理器)。您将“node-sass”添加为 devDependency,然后在“prepare”脚本中运行 sass 命令,该脚本会生成您的 CSS。
因此,当您运行时npm install
,会发生以下情况:
当你运行时npm publish
,会发生类似的事情:
所以现在当有人来安装你的包时,他们不需要 node-sass 或任何你的 devDependencies。他们只需要运行 deps。
该prepare
脚本在本地安装和安装 git 依赖项时运行:
prepare:在打包和发布包之前运行,在本地 npm install 上不带任何参数,以及在安装 git 依赖项时运行(见下文)。这是在 prepublish 之后运行,但在 prepublishOnly 之前运行。
您可以使用以下--ignore-scripts
标志避免它:
$ npm install <package> --ignore-scripts
从文档https://docs.npmjs.com/misc/scripts
prepare:在打包和发布包之前运行,在本地 npm install 上运行,不带任何参数(见下文)。这是在 prepublish 之后运行,但在 prepublishOnly 之前运行。
prepare
脚本在发布之前和之后运行npm install
。
现在,如果您制作一个npm install
并且其中一个软件包有一个prepare
脚本,例如用于构建,并且它失败了,整个安装将失败。
我们有两个选择:
npm install --ignore-scripts
这将对所有包运行忽略,这可能不是所需的行为。想象一个需要运行的第三方包prepare
和build
. 如果你运行--ignore-scripts
这个将被跳过。
将包添加到optionalDependencies
:
{
optionalDependencies: {
"myPackage": "^1.0.0"
}
}
如果可以使用依赖项,但如果找不到或安装失败,您希望 npm 继续,那么您可以将其放入
optionalDependencies
对象中。这是包名称到版本或 url 的映射,就像dependencies
对象一样。不同之处在于构建失败不会导致安装失败。
中的条目
optionalDependencies
将覆盖 中的同名条目dependencies
,因此通常最好只放在一个位置。
检查文档:
https://docs.npmjs.com/cli/v7/configuring-npm/package-json#optionaldependencies
注意:有了这个,只关心选择的包。如果失败,安装将继续。这通常是你想要的。
根据此线程中的此答案:
https://github.com/npm/npm/issues/2817#issuecomment-368661749
--ignore-scripts 的问题是忽略所有脚本。我只需要能够忽略特定包的脚本(构建无法在某些平台上编译的那个)。这个选项通常会破坏我的代码,因为它忽略了其他确实需要运行的包中的所有脚本。
无论如何,为了使这项工作像 OP 一样,我将有问题的软件包设为可选。然后进行常规安装,然后使用 --ignore-scripts 进行第二次安装。这样,我首先运行其他包的脚本,然后第二次忽略它们(包括预期的),然后“获取”该包的源。
通常最好与optionalDependencies
. 这很可能会满足您的需求。