只有当用户手动安装我的npm软件包时才能运行脚本吗?(不是依赖安装)

时间:2016-08-08 01:13:52

标签: node.js npm npm-install

我正在开发我的npm包,我想只在用户手动安装我的包时才运行特定的脚本,如npm install my-package --save-dev或npm命令。

我不希望在通过包依赖安装软件包时运行该命令。 例如,My package是其他包other-package的依赖项。 即使用户手动安装other-package并且npm应该安装my-package作为依赖项,我也不想运行该脚本。

有没有好办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

npm以特定方式启动时,

npm有一组scripts that will automatically run。您可能感兴趣的脚本是:

  
      
  • prepublish:在发布包之前运行。 (也可以在没有任何参数的本地npm install上运行。)
  •   
  • publishpostpublish:在发布包之后运行。
  •   
  • preinstall:在安装软件包之前运行
  •   
  • installpostinstall:安装软件包后运行。
  •   

没有与您的条件完全匹配的事件,但您可以使用其中一个install事件,然后使用中间脚本在实际脚本之前检测npm命令行选项。

由于({imo horrible)方式prepublish有效,许多人编写了模块来执行类似的任务,这些模块可以很容易地适应您的要求。

iarna/inpublish就是一个很好的例子。它检查process.env['npm_config_argv']是否存在/^i(n(s(t(a(ll?)?)?)?)?)?$/

使用以下package.json设置:

"scripts": {
  "postinstall": "my-install && install-manual-tasks || not-my-install"
}

如果my-install使用process.exit(0),那么install-manual-tasks将会运行。如果您process.exit(1),则not-my-install将清除,以便npm任务不会失败。

我认为这个设置确实存在问题。如果您的install-manual-tasks失败,则退出状态会被取消,npm任务不会失败,但它至少是一个开始。您可以通过在install-manual-tasks脚本中执行所有检查来解决此问题,然后您不需要使用shell技巧来运行多个脚本。

答案 1 :(得分:0)

您可以查看https://superuser.com/a/105389/627275以了解如何创建充当命令别名的shell函数。这样,npm install将作为您想要在现实中运行的任何内容的别名。它也可以是bash something.sh & npm install的别名。

希望能回答你的问题!