我正在构建一个使用名为plop js的外部命令工具的包。在我的package.json
中,我想添加一个引用index.js
文件的二进制文件。
"scripts":{
"plop": "plop"
},
"bin": {
"my-command": "index.js"
},
有一种方法可以在plop
文件中运行我的包中的index.js
脚本吗?
我的目标是在用户在终端中写入my-command
时运行此脚本。 (并使用本地plop,我希望这对消费者来说是透明的)
答案 0 :(得分:1)
您无法直接require
并使用plop的原因是它是一个CLI。作为CLI,除了使用process.argv
作为输入外,它不会导出任何内容。因此,您真正需要做的就是在process.argv
require
之前更改脚本中的plop
。
process.argv.push('--version');
require('plop');
然后,您可以使用内置的--plopfile
参数指向您要运行的特定文件。
答案 1 :(得分:0)
我只是遇到了同样的问题,发现此代码有效:
#!/usr/bin/env node
process.argv.push('--plopfile', __dirname + '/plopfile.js');
require('plop');
答案 2 :(得分:0)
由于“ 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);
答案 3 :(得分:-1)
npm的scripts
( start 除外)总是像npm run plop
一样运行。
通常你定义一个启动命令,它通常像npm start
一样运行,并且每个人都知道。你也可以在那里链接命令(如果你需要运行多个)。
假设您要将plop作为第一个命令运行:如果键入npm start
,它将执行 plop ,然后 node index.js
"scripts":{
"start": "plop && node index.js"
},
如果你想在npm install之后运行一次**,请将其放入"postinstall" : "plop"