我正在开发我的npm包,我想只在用户手动安装我的包时才运行特定的脚本,如npm install my-package --save-dev
或npm命令。
我不希望在通过包依赖安装软件包时运行该命令。
例如,My package是其他包other-package
的依赖项。
即使用户手动安装other-package
并且npm应该安装my-package
作为依赖项,我也不想运行该脚本。
有没有好办法解决这个问题?
答案 0 :(得分:2)
npm
以特定方式启动时, npm
有一组scripts that will automatically run。您可能感兴趣的脚本是:
prepublish
:在发布包之前运行。 (也可以在没有任何参数的本地npm install
上运行。)publish
,postpublish
:在发布包之后运行。preinstall
:在安装软件包之前运行install
,postinstall
:安装软件包后运行。
没有与您的条件完全匹配的事件,但您可以使用其中一个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
的别名。
希望能回答你的问题!