繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM