- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
TL;DR:如果您的 package.json
已被修改,有没有办法让 npm install
在运行任何 npm 脚本之前自动运行?
您拉取或 checkout 更新了 package.json
的分支。你运行 npm run my-script
。 my-script
依赖于新添加到 package.json
的包。 my-script
失败。你想知道为什么。在翻转你的 table 之前,你运行 npm install
只是为了确定。 my-script
运行成功。你不需要一张新 table 。
我知道像 gradle
这样的构建/任务运行工具可以确保在运行任务之前你的依赖项是最新的。我一直是 npm
不这样做的(次要)痛点。我偶然发现了两个我不太喜欢的解决方案。
不要依赖 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 生态系统之外的一个过时工具,而且对于这种智能安装优势而言成本太高。
另一种方法是添加一个 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/
我是 Maven 新手,正在尝试了解它是如何工作的。 我知道生命周期由多个阶段组成。阶段称为他们的魔力。如果调用一个阶段,则前面的所有阶段也会执行。例如,当我调用 mvn install 时就会发生这
我想安装Ros(机器人操作系统)的驱动程序,我有两个选项:二进制安装和从源代码编译安装。我想知道哪种安装更好,每种安装有哪些优点和缺点。 最佳答案 源:又称源代码,通常位于某种 tarball 或 z
以及更具体的问题。我的理解对吗: “nuget install”总是安装到您运行它的目录吗? “choco install”安装到特殊的 choco 目录,然后运行脚本在系统中传播它? “nuget
我创建了 Android 项目,但随后我立即得到出现错误的信息。 Warning:(22, 12) Dependency on a support library, but the SDK insta
我的安装程序有 32 位和 64 位版本,它们具有(几乎)完全相同的代码和自定义操作序列(只有与此问题无关的细微差别) 我希望我的安装程序能够检测它之前是否已安装,并在这种情况下运行我自己的代码,而不
我在TFS版本中使用npm install cmd。我总是得到以下警告: npm WARN optional dep failed, continuing fsevents@0.3.1 如何删除此警告
是否可以将install(TARGETS ...)与在add_subdirectory添加的目录中定义的目标一起使用? 我的用例是,我想为gtest构建一个rpm的e.gg。 gtest项目恰好有一个
我需要使用 MSI 创建安装程序,其目的是根据用户的区域(从环境变量读取)调用正确的安装程序。也就是说,这个安装程序应该有 3 个文件(它们本身就是安装程序),一个用于美国,一个用于欧洲,一个用于亚洲
我正在尝试通过 Android Studio 3.5 在我的小米 RedMi S2 上运行我的应用程序。在手机上安装应用程序时抛出错误: Installation did not succeed. T
使用govendor时,go install、govendor install +local和govendor install +vendor,^program有什么区别? govendor inst
我用谷歌搜索了很多,但找不到答案。因此,在 Windows Installer 属性值中可以存储多少个字符。如果你给出答案,你能提供答案的来源吗? 最佳答案 我问 Windows Installer
Cuda v9.0 有几个补丁 我应该安装最新补丁还是安装所有补丁? https://developer.nvidia.com/cuda-90-download-archive?target_os=W
我正在尝试通过它的文档安装 phalcon!在这一步我有一个错误: installation/FreeBSD Command: pkg_add -r phalcon 错误: 'pkg_add' is
我有一个安装,如果应用程序退出,它会升级该应用程序的先前版本。当安装处于升级模式时,我想跳过某些操作。如何确定安装是在升级模式还是首次安装模式下运行? 我正在使用 Wise Installer,但我认
MSI 数据库包含一个表 MsiFileHash 。根据文档MsiFileHash 表用于存储 Windows Installer 包提供的源文件的 128 位哈希。 有人知道使用/应该使用什么哈希算
我尝试在本地和全局运行 npm install browserify (-g) 但我总是遇到以下错误 npm ERR! peerinvalid The package bn.js does not s
我有一个用于我正在构建的 python 模块的 SConstruct 文件: import distutils.sysconfig env = Environment(CPPPATH=['includ
使用 Installshield 2010 和 Basic MSI 项目。 我有一个之前由我的安装程序安装的 exe。该 exe 需要在安装程序升级期间运行。有没有办法保证安装程序不会尝试关闭进程?基
我是围棋初学者。我试图编译一个 go 项目,但找不到任何解释“/...”的文档或文章。 cd ~/src/ephenation-server go install -v ./... 等待您的帮助。 最
我试过在选择和不选择‘安装Mongo指南针’选项的情况下运行安装程序,但我仍然无法安装它,也无法取消安装。然后,此设置对话冻结20-30分钟以上,没有任何进展。这实际上就是从他们的website(ht
我是一名优秀的程序员,十分优秀!