gpt4 book ai didi

node.js - 如何在 "bin"的 "package.json"字段内设置环境变量

转载 作者:行者123 更新时间:2023-12-04 10:01:04 24 4
gpt4 key购买 nike

我有一个带有 cli 的 npm 包:

  "bin": {
"myprogram": "./cli.js"
}

可以通过运行myprogram --param value来执行它,没有任何问题。我在npm's docs中找不到它但我想知道是否有一种方法可以在运行 cli.js

之前设置环境变量

我已经尝试过:

  "bin": {
"myprogram": "TZ=utc ./cli.js"
}

但看起来 npm 无法处理它:

npm ERR! code ENOENT
npm ERR! syscall chmod
npm ERR! path /usr/local/lib/node_modules/@myprogram/myprogram/TZ=utc ./cli.js
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, chmod '/usr/local/lib/node_modules/@myprogram/myprogram/TZ=utc ./cli.js'

我不想通过 TZ=utc myprogram 执行此操作。

最佳答案

您无法按照您希望的方式设置环境变量,但我可以建议替代解决方案。

在您的 package.json 中将脚本字段设置为:

"scripts": {
"start": "TZ=utc ./cli.js"
}

然后在与 cli.js 相同的文件夹中创建一个文件,我们将其命名为 cli-wrapper.js。

然后您可以使用以下代码片段创建 cli-wrapper.js:

#!/usr/bin/env node

const spawn = require('child_process').spawn;
const started = spawn('npm', ['run', 'start'], { cwd: __dirname });

started.stdout.on('data', function (data) {
console.log('stdout:', data.toString());
});

started.stderr.on('data', function (data) {
console.log('stderr:', data.toString());
});

started.on('exit', function (code) {
console.log('child process exited with code:', code.toString());
});

上面的代码片段是一小段代码,它只是使用“npm run script”在当前目录中生成一个 Node 脚本进程。 您可能需要根据运行 bin 文件的方式对此代码段进行一些调整。也许使用 path解析正确的目录并在发出命令之前更改为它。 我认为不再需要调整目录,我已经调整了上面的代码,它似乎按预期运行。

然后您可以调整 package.json 文件的 bin 参数:

"bin": {
"myprogram": "./cli-wrapper.js"
}

只要生成代码片段在正确的文件夹中运行,它就应该允许您在 package.json 的 script.start 字段中指定不同的环境参数。

关于node.js - 如何在 "bin"的 "package.json"字段内设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61817336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com