[英]Npm package how to run script programmatically
我正在构建一个使用名为 plop js 的外部命令工具的包。 在我的package.json
我想添加一个引用index.js
文件的二进制文件。
"scripts":{
"plop": "plop"
},
"bin": {
"my-command": "index.js"
},
有没有办法从我的index.js
文件中的包运行plop
脚本?
我的目标是在用户在终端中编写my-command
时运行此脚本。 (并使用本地 plop,我希望这对消费者透明)
您不能直接require
和使用 plop 的原因是它是一个 CLI。 作为 CLI,它不导出任何内容,而是使用process.argv
作为其输入。 因此,您真正需要做的就是在require
plop
之前更改脚本中的process.argv
。
process.argv.push('--version');
require('plop');
然后,您可以使用内置的--plopfile
参数指向要运行的特定文件。
我只是有同样的问题,发现此代码有效:
#!/usr/bin/env node
process.argv.push('--plopfile', __dirname + '/plopfile.js');
require('plop');
由于“plop”:“^2.7.3”,我发现上面的内容不再起作用,并且从https://github.com/plopjs/plop/issues/78我看到了新的解决方案
#!/usr/bin/env node
const args = process.argv.slice(2);
const {Plop, run} = require('plop');
const argv = require('minimist')(args);
Plop.launch({
cwd: argv.cwd,
configPath: argv.plopfile, // changed to `${process.cwd()}/plopfile.js` in my case
require: argv.require,
completion: argv.completion
}, run);
npm 的scripts
(除了start )总是像npm run plop
一样npm run plop
。 通常你定义一个启动命令,它通常像npm start
一样npm start
并且众所周知。 您还可以在那里链接命令(如果您需要运行多个)。
假设您想将 plop 作为第一个命令运行:如果您输入npm start
,它将执行plop ,然后执行node index.js
"scripts":{
"start": "plop && node index.js"
},
如果你想在 npm install 后只运行 **一次*,把它放到"postinstall" : "plop"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.