说,我正在制作一个npm包。
示例package.json:
{
"bin": { "cli": "cli.js" },
"scripts": {
"sample": "node sample.js"
}
}
示例cli.js:
const shell = require('shelljs')
shell.exec('npm run sample')
然后,我运行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')
这种作品。但主要限制是:
项目的所有贡献者必须在克隆回购后手动设置此路径。
如果包是全局安装的,如npm i -g package
,则此路径更改对用户来说很烦人。
我要问的是:
如何自动设置路径?
任何其他更好方式来实现相同的行为,即
从全局npm script
脚本调用cli
?
答案 0 :(得分:1)
我找到了解决问题的优雅解决方案。
将cli.js
文件编辑为:
const shell = require('shelljs')
shell.exec(`npm run --prefix ${__dirname} sample`)
Node提供了一些非常有帮助的 facade 全局变量(read here)。
在这里,__dirname
是完美的解决方案。它提供了执行脚本的路径。
希望这可以帮助其他任何开发人员。