Npm包如何以编程方式运行脚本

时间:2017-06-27 15:01:38

标签: javascript node.js npm

我正在构建一个使用名为plop js的外部命令工具的包。在我的package.json中,我想添加一个引用index.js文件的二进制文件。

  "scripts":{
     "plop": "plop"
  },
  "bin": {
    "my-command": "index.js"
  },

有一种方法可以在plop文件中运行我的包中的index.js脚本吗?

我的目标是在用户在终端中写入my-command时运行此脚本。 (并使用本地plop,我希望这对消费者来说是透明的)

4 个答案:

答案 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"