gpt4 book ai didi

javascript - npm install 如果 package.json 被修改

转载 作者:IT老高 更新时间:2023-10-28 23:03:39 26 4
gpt4 key购买 nike

TL;DR:如果您的 package.json 已被修改,有没有办法让 npm install 在运行任何 npm 脚本之前自动运行?

问题场景

您拉取或 checkout 更新了 package.json 的分支。你运行 npm run my-scriptmy-script 依赖于新添加到 package.json 的包。 my-script 失败。你想知道为什么。在翻转你的 table 之前,你运行 npm install 只是为了确定。 my-script 运行成功。你不需要一张新 table 。

我知道像 gradle 这样的构建/任务运行工具可以确保在运行任务之前你的依赖项是最新的。我一直是 npm 不这样做的(次要)痛点。我偶然发现了两个我不太喜欢的解决方案。

非理想解决方案:make

不要依赖 package.json 中的 npm 脚本来运行命令,而是使用 make 并通过以下技巧利用其集成的依赖跟踪:

# Smart install: Only executes if package.json's
# modification date is later than node_module's

node_modules: package.json
npm install
@rm -f node_modules/.modified
@touch -m node_modules/.modified

install: node_modules

来源:https://mattandre.ws/2016/05/make-for-hipsters/

问题是你知道必须依赖 make 来运行脚本,而失去了 npm 脚本的某些优势,例如方便地引用其他脚本和并行运行脚本(npm-run -全部)。如果他们不知道 make 或在运行它时遇到问题 (Windows),与其他人一起工作也会更加困难。它是 node/npm 生态系统之外的一个过时工具,而且对于这种智能安装优势而言成本太高。

非理想解决方案:Git Hook

另一种方法是添加一个 post-merge git hook。

问题是这个解决方案是存储库本地的,不能轻易共享。 npm install 只会在 git 合并时自动运行。当您以任何其他方式更改 package.json 时,您仍然必须记住运行 npm install。诚然,这在实践中只是一个小问题。尽管如此,当您想要运行脚本时,完全不必考虑运行 npm install 会很好。

来源:https://davidwalsh.name/git-hook-npm-install-package-json-modified

理想的解决方案

我想以类似于以下方式定义我的 package.json:

{
"scripts": {
"pre-run": "npm-smart-install",
"my-script": "…"
},
"dependencies": {
"npm-smart-install": "1.0.0"
}
}

npm-smart-install 是我希望存在的一个假设的 npm 包。 pre-run 是一个假设的 npm-scripts 生命周期钩子(Hook)。当我运行 npm run my-script 并且 package.json 自上次运行任何脚本以来已被修改时,请在运行 npm install 之前运行 我的脚本

重复一遍:如果您的 package.json 已被修改而不依赖于 npm 之外的工具,有没有办法让 npm install 在运行任何 npm 脚本之前自动运行生态系统?

最佳答案

好的,我已经完成了包裹。 Here这是。您可以完全按照您在理想场景中指定的方式使用它。只需 npm install install-changed 并将其添加到自定义脚本中,例如您的示例中的 pre-run 。它应该弄清楚它是否需要 npm install 并在需要时这样做。

 {
"scripts": {
"pre-run": "install-changed",
"my-script": "…"
},

您也可以以编程方式执行此操作,但我认为您不需要它。

let installChanged = require('install-changed')

let isModified = installChanged.watchPackage()

上面的函数做同样的事情,此外它还返回一个 bool 值,你可能会发现它很有用。

关于javascript - npm install 如果 package.json 被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52466740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com