每当我运行npm install <package>
时,它都会安装好包,但随后会自动运行准备脚本。
值得一提的是,我已经检查过 package.json 中没有postinstall
脚本。
提前谢谢你们女孩/伙计们! :)
答案 0 :(得分:5)
来自https://docs.npmjs.com/misc/scripts:
准备:在打包和发布包之前运行它们 没有任何参数的本地npm安装(见下文)。这是在AFTER之后运行的 预发布,但在preublishOnly之前。
自NPM v5起,运行prepare
npm install
脚本
答案 1 :(得分:2)
prepare
脚本在本地安装和安装git依赖项时运行:
准备::在打包和发布软件包之前,在没有任何参数的本地npm install上以及在安装git依赖项时(请参见下文)都运行。该操作在预发布之后运行,但仅在预发布之前运行。
您可以使用--ignore-scripts
标志来避免这种情况:
$ npm install <package> --ignore-scripts
答案 2 :(得分:2)
其他答案很好,但是对于某些其他情况,这是为了支持工作流,您可以在其中使用devDependencies为项目构建资产或其他生成的内容。
例如,假设您要使用node-sass(CSS预处理器)。您将“ node-sass”添加为devDependency,然后在“ prepare”脚本中运行sass命令,该脚本会生成CSS。
因此,当您运行npm install
时,会发生以下情况:
当您运行npm publish
时,会发生类似的情况:
因此,现在当有人来安装您的软件包时,他们不需要node-sass或任何您的devDependencies。他们只需要运行时deps。
答案 3 :(得分:0)
除了Yasha的答案外,还很小。当您运行npm install
或npm ci
答案 4 :(得分:0)
来自文档 https://docs.npmjs.com/misc/scripts
<块引用>准备:在打包和发布包之前运行,以及在没有任何参数的本地 npm install 上运行(见下文)。这是在预发布之后运行,但仅在预发布之前运行。
prepare
脚本在发布之前和 npm 安装之后运行!
现在,如果您制作 npm install
!然后其中一个包有一个 prepare
脚本!喜欢建筑!那失败了! 整个安装失败!它没有通过!不会发生任何变化!
我们有两个选择:
npm install --ignore-scripts
这将忽略所有包!这可能不是所需的行为!想象一个需要运行准备和构建的第三方包!没有问题!但是然后执行上面的!会跳过它!
将包添加到 optionalDependencies
!
{
optionalDependencies: {
"myPackage": "^1.0.0"
}
}
<块引用>
如果可以使用依赖项,但如果找不到或安装失败,您希望 npm 继续,那么您可以将它放在 optionalDependencies 对象中。这是包名称到版本或 url 的映射,就像依赖项对象一样。不同之处在于构建失败不会导致安装失败。
<块引用>optionalDependencies 中的条目将覆盖依赖项中同名的条目,因此通常最好只放在一个地方。
检查文档:
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!最适合您的需求!