比如说,我正在制作一个 npm 包。
示例 package.json:
{
"bin": { "cli": "cli.js" },
"scripts": {
"sample": "node sample.js"
}
}
Run Code Online (Sandbox Code Playgroud)
示例 cli.js:
const shell = require('shelljs')
shell.exec('npm run sample')
Run Code Online (Sandbox Code Playgroud)
然后,我跑npm link
现在,如果我cli从项目存储库以外的任何地方运行,它都不会运行。相反,它会抛出错误。
我通过将 cli.js 更改为以下方式找到了解决方法:
const shell = require('shelljs')
, package_path = require('./path.json')
// I manually created this path.json containing the absolute path of the package
shell.exec('npm run --prefix ${package_path} sample')
Run Code Online (Sandbox Code Playgroud)
这种作品。但主要限制是:
项目的所有贡献者必须在克隆存储库后手动设置此路径。
如果像这样全局安装软件包,npm i -g package那么这种路径更改会让用户感到烦恼。
我要问的是:
如何自动设置路径?
还有其他更好的方法来实现相同的行为,即npm script从全局cli脚本调用 a 吗?
我找到了解决我的问题的优雅方法。
将cli.js文件编辑为:
const shell = require('shelljs')
shell.exec(`npm run --prefix ${__dirname} sample`)
Run Code Online (Sandbox Code Playgroud)
Node 提供了一些非常有用的外观全局变量(请阅读此处)。
这里,__dirname是完美的解决方案。它提供了执行脚本的路径。
希望这对其他开发人员有所帮助。
| 归档时间: |
|
| 查看次数: |
5262 次 |
| 最近记录: |