我有一个具有以下结构的Node
项目:
.
├── index.js
├── package.json
├── updater.js
└── yarn.lock
我在此项目中使用Yarn
。
内部文件:package.json
中有对包的引用:@emotion/core@^10.0.22
,如下所示:
{
"name": "my-project",
...
"dependencies": {
...
"@emotion/core": "^10.0.22",
...
}
...
}
我需要的是:
[从内部文件:updater.js
文件,将软件包:@emotion/core
升级到版本:^10.0.27
(以防万一,请记住我正在使用Yarn
),所以我可以这样做:
$ node updater.js
从命令行,我可以很容易地做到这一点:
$ yarn upgrade @emotion/core@^10.0.27
但是我需要从文件内部执行此操作:updater.js
(这是必需的)。这是最大问题的简化(因此,即使没有用,我也需要满足此虚拟用例的要求)。
此代码将放在自定义软件包中,该软件包将负责安装其他软件包。
提前感谢!
最简单的方法是使用child_process
执行任何脚本:
const { exec } = require('child_process');
const childProcess = exec('yarn upgrade @emotion/core@^10.0.27', (error, stdout, stderr) => {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
您可以在node.js document page
处查看更多信息>
您可以通过执行以下操作来传递stdio以获得接近实时的输出:
node.js document page
但是要小心使用
childProcess.stdout.pipe(process.stdout)
库,应该尽可能使用*sync
块代码。最好使用NOT
或将其设为callback
[还有Promise
之类的出色软件包可以对此进行封装。