为任何本地依赖项运行 postinstall 挂钩

2024-02-08

如果我们有这个:

{
  "scripts":{
    "postinstall":"./scripts/postinstall.sh"
  }
}

然后,每当我们执行以下操作时,此 postinstall 挂钩就会运行

$ npm install

在命令行中

然而,我想知道的是,当我们安装这样的依赖项时,是否有办法运行安装后挂钩

$ npm install x

我们可以使用一些 NPM 钩子吗?


简短回答据我所知,npm 没有内置功能来提供这种挂钩。


可能的解决方案,尽管是 bash ,但会完全覆盖npm install x具有您自己的自定义逻辑的命令。例如:

  1. 创建一个.sh脚本如下。让我们命名该文件custom-npm-install.sh:

    #!/usr/bin/env bash
    
    npm() {
      if [[ $* == "install "* || $* == "i "* ]]; then
    
        # When running `$ npm install <name>` (i.e. `$ npm install ...` followed
        # by a space char and some other chars such as a package name - run
        # the command provided.
        command npm "$@"
    
        # Then run a pseudo `postinstall` command, such as another shell script.
        command path/to/postinstall.sh
      else
        # Run the `$ npm install` command and all others as per normal.
        command npm "$@"
      fi
    }
    
  2. 将以下代码片段添加到您的.bash_profile file (注意:您需要定义实际路径custom-npm-install.sh):

    # Custom logic applied when the `npm install <name>` or the
    # shorthand equivalent `npm i <name>` command is run.
    . path/to/custom-npm-install.sh
    

Notes

  1. 配置完你的.bash_proile根据上面的第二点,您需要创建一个新的终端会话/窗口才能使其有效。该逻辑将在此后的所有终端会话中有效。

  2. 现在,每当你跑步时npm install <name>或许多其他变体,例如:

    • npm install <name>@<version>
    • npm install <name> <name> --save-dev
    • npm i -D <name>
    • 等等,等等...

    custom-npm-install.sh将正常运行命令,然后运行命令./scripts/postinstall.sh(即无论随后给定的命令设置为什么)。

  3. 所有其他 npm 命令将正常运行,例如npm install

  4. Given custom-npm-install.sh当前逻辑./scripts/postinstall.sh每当npm install <name> ...通过 CLI 输入。但是,如果您希望它运行ONLY当安装特定的软件包时,您需要更改中的条件逻辑if陈述。例如如果你想要./scripts/postinstall.sh to run ONLY安装时shelljs https://www.npmjs.com/package/shelljs然后改变if声明至:

    if [[ $* == "install "*" shelljs"* || $* == "i "*" shelljs"* ]];
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为任何本地依赖项运行 postinstall 挂钩 的相关文章

随机推荐

  • TFS 构建自动化

    我有 TFS 2010 构建一个项目解决方案 它是一个复印机 构建成功但什么也没做 即 不复制 我如何让触发的构建来复制文件 Thanks 我有 TFS 2010 和 VS professional 2010 EDIT Update 复印机
  • 无法从 Servlet 过滤器内的 FacesContext 检索会话

    对我的用户进行身份验证后 我想在会话中添加对当前登录用户的引用 这是我如何做到的setCurrentUser方法 FacesContext facesContext FacesContext getCurrentInstance HttpS
  • Google oauth2client 出现 EOF 错误(Python、google-app-engine)

    我目前在我的 Python Web 应用程序中使用 oauth2client 以便使用 Google 的日历 API 我将 oauth2client 复制到目录的根文件夹中 然后按照以下说明进行操作https developers goog
  • 如何使用 SendKeys 将模拟键盘敲击发送到活动窗口

    我是 Python 新手 正在尝试将击键组合发送到我在 Windows 7 下打开的应用程序 虽然当我出于测试目的调用 Notepad exe 时 我的脚本可以完美运行 但它不适用于我正在尝试的实际应用程序使用 到目前为止 这是我的代码 i
  • 是否可以在容器组件的函数之间传递 React 组件作为参数

    将子组件作为参数传递给父组件的函数并尝试渲染不起作用 React Container Component Import Both Views and Render based on preference import PosterView
  • Windows Chrome 扩展本机消息传递只能接收第一个响应

    我正在尝试使用本机消息传递将一些数据发送到我的本机 Windows 应用程序 它与runtime sendNativeMessage 方法配合得很好 当我尝试使用使用端口的长期连接时 它也可以将数据从 Chrome 传递到我的应用程序 但是
  • 使用包含 $$ 字符的 SQLExec 执行文件

    我使用 pg dump 创建了一个 sql 转储文件 此导出文件包含包含 字符的函数 使用 psql f 导入文件没有问题 如果想使用 SQLExec 任务通过 ant 导入文件 我会得到如下异常 org postgresql util P
  • 来自上传文件的数据

    我有一个代码 其中包含上传到文件夹的文件数量 我希望将这些文件的名称 大小和 URL 存入数据库 但我的控制器无法正常工作 我使用 CakePHP 框架 我想将这些文件数据添加到数据库中 所有文件数据 但出现错误 Error Notice
  • 如何识别显示为空括号的空 NSData 对象?

    我正在处理 Game Kit 的 GKTurnBasedMatch 类中的损坏问题 请参阅这个线程 https stackoverflow com questions 15373903 removing a gkturnbasedmatch
  • 将结构插入映射时如何使用结构的成员作为其自己的键而不重复它?

    是否可以将结构插入到映射中 其中键由所插入的值拥有 当在 C 中使用哈希映射时 这是我习惯做的事情 伪代码示例 struct MyStruct pub map BTreeMap lt String StructThatContainsStr
  • 问:更改 Android Studio 中的通知图标

    我配置了应用程序图标 图 1 但通知图标 通过 Firebase 发送的通知 显示灰色矩形 图 2 通过 Android Studio 2 3 或通过脚本更改通知图标图像 图 2 的过程是什么 Manifest
  • Rails3 中的行为树?

    我需要在我的 Rails3 项目 ruby 1 9 2 中使用 Acts As Tree 但是 github上有很多fork 所以我不知道我应该选择哪个 哪个被其他开发者使用 在 Railsplugins org 上有http www ra
  • 使用 ViewBag 中的列表选择 TagHelper

    我目前正在尝试在 asp net 5 中使用 taghelpers 我想使用带有 ViewBag 列表的选择标签助手 我放入 asp for 字段的任何内容都会出错 因为它试图从 IEnumerable 模型而不是视图包中提取它 我想替换这
  • 如何过滤此 PHP 数组对象中的唯一对象[重复]

    这个问题在这里已经有答案了 我有一个从服务器端生成的对象数组 我想在 PHP 中过滤重复项 下面是生成的数组 array 5 0 gt 204 category name Fashion category id fashion 1 gt 2
  • Android如何通过xml或编程绘制正多边形

    有没有办法在 Android xml 布局上绘制多边形形状 或者是否有任何辅助类作为库来绘制它们 我正在使用增强版这个班 https gist github com AnderWeb face86a92e28fe32983a 请参阅工作示例
  • 协程、延续、生成器

    协程 延续和生成器有什么区别 我将从生成器开始 因为它们是最简单的情况 正如 zvolkov 提到的 它们是可以重复调用而不返回的函数 对象 但在调用时将返回 产生 一个值 然后挂起它们的执行 当他们再次被调用时 他们将从上次暂停执行的地方
  • 删除映射中的特定条目,但迭代器必须指向删除后的下一个元素[重复]

    这个问题在这里已经有答案了 复制 如果在从开始到结束迭代时对地图元素调用擦除会发生什么 https stackoverflow com questions 263945 what happens if you call erase on a
  • silverlight 列表框即使为空也会抛出“值未落在预期范围内”?

    我正在以编程方式使用模板控件动态填充 silverlight 列表框 列表框是空的 当我尝试 listBox Items Add myTemplateControl 时 它会抛出 值不在预期范围内 参数异常 我在调试器中验证了项目集合确实是
  • 检查类构造函数是否定义了方法

    这是一个简单的问题 我想检查类构造函数是否定义了方法 例如 class MyClass myMethod hasMethodDefined MyClass myMethod true hasMethodDefined MyClass wha
  • 为任何本地依赖项运行 postinstall 挂钩

    如果我们有这个 scripts postinstall scripts postinstall sh 然后 每当我们执行以下操作时 此 postinstall 挂钩就会运行 npm install 在命令行中 然而 我想知道的是 当我们安装