Как обновить указанный c пакет внутри файла Node? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть 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 (это требование). Это упрощение самой большой проблемы (поэтому мне нужно выполнить требования этого фиктивного варианта использования, даже если он не имеет смысла).

Этот код будет go внутри пользовательского пакета, который будет принимать заботиться об установке некоторых других пакетов.

Заранее спасибо!

1 Ответ

2 голосов
/ 11 февраля 2020

Самый простой будет использовать 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 для вывода в реальном времени, выполнив:

childProcess.stdout.pipe(process.stdout)

Но остерегайтесь использования библиотек *Sync (например, execSync), вы должны NOT блокировать код всякий раз, когда это возможно. Лучше использовать callback или сделать его Promise

Также есть замечательные пакеты, такие как shelljs для инкапсуляции этого.

...