Как клонировать репозиторий из битовой корзины в качестве зависимости в package.json, собрать и упаковать его - PullRequest
0 голосов
/ 12 мая 2019

У меня есть основной проект с множеством зависимостей, некоторые из которых устанавливаются непосредственно из npm, и некоторые из них должны быть клонированы и собраны из набора битов как библиотеки. В настоящее время я клонирую / извлекаю их по отдельности, затем запускаю команду build и package, а затем обновляю путь к собранному пакету (.tgz) на моем локальном компьютере в основном файле package.json. Я не уверен, что мог бы просто добиться того, чтобы при запуске npm install на основной package.json он автоматически загружал необходимые дочерние репозитории, собирал и упаковывал их.

Вот мой главный package.json -

{
  "name": "main",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "build-n-watch": "ng build --watch"
  },
  "private": true,
  "dependencies": {
    .
    .
    .
    "@angular/router": "~7.2.0",
    "admin": "file:C:/Users/some-project-path/dist/prj1/prj1-0.0.1.tgz",
    "teacher": "file:C:/Users/some-project-path/dist/prj2/prj2-0.0.1.tgz",
    "tslib": "^1.9.0",
    "zone.js": "~0.8.26"
  },

Ниже следует мое дочернее хранилище package.json, которое мне нужно клонировать, собрать и упаковать -

{
  "name": "admission",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "build-n-watch": "ng build --watch",
    "build-n-pack": "npm run build & cd dist/prj1 & npm pack"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "~7.2.0",
    "@angular/cdk": "^7.3.3",
    "@angular/common": "~7.2.0",
    .
    .
    .

Ниже приведен мой URL-адрес битовой корзины, в котором находятся дочерние репозитории -

https://bitbucket.org/team-a/prj1/src/master/

Мне в основном нужно clone/pull из этого URL, pm install и npm run build-n-pack автоматически.

1 Ответ

0 голосов

если бы я был на вашем месте, я бы взял какой-нибудь нестандартный файл script.js, подобный следующему

const { spawn } = require('child_process')

function execPull () {
  return new Promise((resolve, reject) => {
    const commandExecuter = spawn('git', ['pull'])
    let stdOutData = ''
    let stderrData = ''

    commandExecuter.stdout.on('data', data => (stdOutData += data))
    commandExecuter.stderr.on('data', data => (stderrData += data))
    commandExecuter.on('close', code => {
      console.log('Pull complete')
      return code != 0
        ? reject(stderrData.toString())
        : resolve(stdOutData.toString())
    })
  })
}

function execNpmInstall () {
  return new Promise((resolve, reject) => {
    const commandExecuter = spawn('npm.cmd', ['install'])

    let stdOutData = ''
    let stderrData = ''

    commandExecuter.stdout.on('data', data => (stdOutData += data))
    commandExecuter.stderr.on('data', data => (stderrData += data))
    commandExecuter.on('close', code => {
      console.log('Node modules installed')
      return code != 0
        ? reject(stderrData.toString())
        : resolve(stdOutData.toString())
    })
  })
}

execPull()
  .then(() => execNpmInstall())
  .catch(e => {
    throw new Error(e)
  })

Таким же образом вы можете объединить в цепочку столько же команд npm.

После этого, если хотите, вы можете создать собственный скрипт, который вы можетезапустить с npm run {your script name}

{
  ...,
  "scripts": {
     ...,
    "{your script command}": "node {your script name}.js"
  },
  ...
}

Вы можете проверить этот пакет npm run-git-command для запуска команд git.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...