Как связать вызов скрипта npm после каждой сборки ng serve?

Я пытаюсь связать вызов скрипта ng serve во время работы, но когда я запускаю эту команду, второй связанный скрипт build-components.js запускается только при первом вызове.
Я думал, что пакет одновременно здесь разрешит оба скрипта для последовательного запуска в соответствии с документами https://www.npmjs.com/package/concurrently

То, что я собираюсь сделать, это запускать скрипт build-components.js каждый раз, когда запускается ng serve (т. е. обнаруживает изменение источника).

Скрипт Package.json:

"build:watch": "concurrently \"ng serve --port 4003\" \"node build-components.js\""

Тестирование

 concurrently "ng serve --port 4003" "node build-components.js"

[1] node build-components.js exited with code 0
[0] i 「wds」: Project is running at http://localhost:4003/webpack-dev-server/

Вопрос:

Как вы можете запускать другой скрипт npm после каждой сборки ng serve?

Я также просмотрел почтовые крючки npm, но, похоже, это не запускает скрипт после запуска ng serve.

http://www.marcusoft.net/2015/08/pre-and-post-hooks-for-npm-scripting.html#hooks-pre-and-post

Это сценарий build-components.js для справки. Он копирует некоторые дополнительные файлы сборки в общую папку для хостинга:

const fs = require('fs-extra');
const concat = require('concat');

(async function build() {
  const js = [
    './dist/app/runtime-es2015.js',
    './dist/app/main-es2015.js',
    './dist/app/scripts.js',
  ];
  const css = ['./dist/app/styles.css'];

  await fs.ensureDir('components');
  await concat(js, 'components/component.js');
  await concat(css, 'components/component.css');
})();

person Brian J    schedule 10.10.2019    source источник
comment
что вы пытаетесь сделать большую картину?   -  person Pace    schedule 10.10.2019
comment
Другое приложение Angular запрашивает файлы сборки из этого приложения во время выполнения. Так что я пытаюсь в значительной степени ng build && node build-elements.js автоматически, поскольку разработчик сохраняет свою работу. Имеет ли это смысл?   -  person Brian J    schedule 10.10.2019
comment
Так что на самом деле я хотел бы иметь возможность сделать следующее ng build --watch && node build-components.js, но, похоже, вы сказали выше, что сборка ng не завершается при запуске в часах?   -  person Brian J    schedule 10.10.2019
comment
Хм, вы можете настроить angular.json, чтобы создать конфигурацию с другой выходной папкой (или изменить выходную папку по умолчанию). Я не вижу ничего встроенного для объединения файлов. Вы можете использовать ngx-build-plus, чтобы сделать это, но я не знаю для некоторых. Этот вопрос, казалось, предполагал, что это будет возможный.   -  person Pace    schedule 10.10.2019


Ответы (2)


Это невозможно. ng serve не завершается при запуске в режиме наблюдения, поэтому цепочка элементов для запуска после нее не будет иметь никакого эффекта. Команда serve не имеет для этого хуков.

person Pace    schedule 10.10.2019
comment
Да, я вижу, что у ngx-build-plus есть эталонное приложение, чтобы продемонстрировать сборку одного пакета. Похоже, вдвое меньше времени сборки ng-build - person Brian J; 13.10.2019
comment
Вроде взломал это, используя пакет npm watch для запуска сборки с ngx build plus сборкой при каждом изменении исходного файла. Это на пару секунд быстрее, чем старый добрый ng build, так как я вывожу один пакет. Но не так быстро, как ng serve, как я понимаю, потому что ng serve не выводит пакет на диск, а сохраняет пакет в памяти? @Шаг - person Brian J; 16.10.2019
comment
@BrianJ ng serve — это добавочная сборка. Первая сборка должна иметь примерно ту же скорость, что и ng build, но последующие изменения не требуют полной перекомпиляции. Да, это достигается за счет хранения в памяти не только пакета, но и контекста сборки, который уже проанализирован и токенизирован. Есть ли способ, которым вы все еще можете использовать ngx build plus и передать флаг --watch? - person Pace; 16.10.2019
comment
Нет, запуск с флагом --watch ведет себя так же, как по умолчанию ng build, он не завершается. Поэтому второй скрипт не запускается. Например ng-build --watch && node build-components.js - person Brian J; 17.10.2019

Просто используйте пост в скриптах

{
    "scripts": [
        "build": "ng build --watch',
        "postbuild": "node build-components.js"
    ]
}
person Guilherme Fontenele    schedule 06.02.2021