只有当用户手动安装我的 npm 包时,才有 运行 脚本的好方法吗?(不是通过依赖安装)
Is there good way to run a script only when the user install my npm package manually?(not installed by dependency)
我正在开发我的 npm 包,我想 运行 只有当用户像 npm install my-package --save-dev
或 npm 命令之类的手动安装我的包时才使用特定脚本。
我不想 运行 通过包依赖安装包时的命令。
例如,我的包是另一个包 other-package
的依赖项。
即使用户手动安装 other-package
并且 npm 应该安装 my-package
作为依赖项,我也不想 运行 脚本。
请问有什么好的方法可以解决吗?
您可以查看 https://superuser.com/a/105389/627275 以了解如何创建一个 shell 函数作为命令的别名。这样一来,npm install
就可以作为您在现实中想要 运行 的任何东西的别名。它也可以是 bash something.sh & npm install
的别名。
希望这能回答您的问题!
当 npm
以特定方式启动时,npm
有一组 scripts that will automatically run。您可能感兴趣的脚本是:
prepublish
: Run BEFORE the package is published. (Also run on local npm install
without any arguments.)
publish
, postpublish
: Run AFTER the package is published.
preinstall
: Run BEFORE the package is installed
install
, postinstall
: Run AFTER the package is installed.
没有完全符合您的标准的事件,但您可以使用 install
事件之一,然后使用一个中间脚本在实际脚本之前检测 npm
命令行选项。
由于 prepublish
的(imo 可怕)工作方式,许多人已经编写了模块来完成类似的任务,并且这些模块可以很容易地适应您的要求。
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 技巧来 运行 多个脚本。
我正在开发我的 npm 包,我想 运行 只有当用户像 npm install my-package --save-dev
或 npm 命令之类的手动安装我的包时才使用特定脚本。
我不想 运行 通过包依赖安装包时的命令。
例如,我的包是另一个包 other-package
的依赖项。
即使用户手动安装 other-package
并且 npm 应该安装 my-package
作为依赖项,我也不想 运行 脚本。
请问有什么好的方法可以解决吗?
您可以查看 https://superuser.com/a/105389/627275 以了解如何创建一个 shell 函数作为命令的别名。这样一来,npm install
就可以作为您在现实中想要 运行 的任何东西的别名。它也可以是 bash something.sh & npm install
的别名。
希望这能回答您的问题!
npm
以特定方式启动时,npm
有一组 scripts that will automatically run。您可能感兴趣的脚本是:
prepublish
: Run BEFORE the package is published. (Also run on localnpm install
without any arguments.)publish
,postpublish
: Run AFTER the package is published.preinstall
: Run BEFORE the package is installedinstall
,postinstall
: Run AFTER the package is installed.
没有完全符合您的标准的事件,但您可以使用 install
事件之一,然后使用一个中间脚本在实际脚本之前检测 npm
命令行选项。
由于 prepublish
的(imo 可怕)工作方式,许多人已经编写了模块来完成类似的任务,并且这些模块可以很容易地适应您的要求。
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 技巧来 运行 多个脚本。