Как использовать шаблон глобуса в разделе сценариев angular.json? - PullRequest
1 голос
/ 01 ноября 2019

У меня есть гибридное приложение AngularJS / Angular, которое займет некоторое время, чтобы полностью перейти на Angular. Пока этот процесс происходит, я бы хотел перейти от предыдущей системы сборки к использованию CLI и веб-пакета для управления всеми старыми сценариями AngularJS. Это возможно, как я уже делал ранее, добавив все мои скрипты в раздел scripts в angular.json, как показано ниже:

"scripts": [              
  "src/app/angularjs/app.js",
  "src/app/angularjs/controllers/main.js",
  "src/app/angularjs/services/someService.js",
  "src/app/angularjs/controllers/someController.js"           
],

Это работает хорошо, и CLI собирается через ng serveи ng build продолжайте работать для гибридного загрузочного приложения по мере необходимости. Проблема, с которой я сейчас сталкиваюсь, состоит в том, чтобы вручную перечислять каждый файл для текущего приложения, которое я переносил, не идеально. У меня есть сотни сценариев, которые нужно добавить, и мне нужно иметь возможность использовать шаблон сглаживания, подобный следующему:

"scripts": [              
  "src/app/angularjs/**/*.js"
],

Проблема в том, что этот синтаксис из того, что я могу сказать, не поддерживается,Шаблон глобуса поддерживается в разделе assets в angular.json, как указано здесь, но не в разделе scripts: https://angular.io/guide/workspace-config#assets-configuration

В разделе scripts я могуне найти аналогичное решение. Он имеет расширенный объектный API, но ничего, что может решить проблему, которую я могу сказать, чтобы выбрать все .js файлы из определенного каталога, как указано здесь: https://angular.io/guide/workspace-config#styles-and-scripts-configuration

Возможно ли этокаким-то образом использовать шаблон глобуса или аналогичный подход для выбора всех файлов каталога для раздела scripts в angular.json, поэтому мне не нужно вручную перечислять сотни отдельных .js файлов?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Плохие новости

Раздел scripts не поддерживает те же шаблоны глобусов, что и раздел assets.

Хорошие новости (?)

Поскольку вы переходите от AngularJS, у вас, надеюсь, не будет новых файлов для импорта в будущем, поэтому вы можете просто сгенерировать список всех файлов, которые необходимо импортировать.

Пройдите ккаталог src/app/angular и выполните следующее:

find . -iregex '.*\.\(js\)' -printf '"%p",\n'

Это даст вам ваш список, уже цитируемый для вашего удобства. Вам может потребоваться выполнить быстрый поиск / замену (изменив "." На "src / app / angularjs"), и не забудьте удалить последнюю запятую, но как только вы это сделаете, однажды все будет готово.

Дополнительные новости

Вы можете дополнительно отфильтровать ненужные файлы с помощью -not, поэтому (согласно вашему комментарию) вы можете сделать:

find . -iregex '^.*\.js$' -not -iregex '^.*_test\.js$' -printf '"%p",\n'

И это должно датьвсе ваши файлы .js без файлов _test.js.

KISS

Конечно, это не сложный шаблон, поэтому, как указывает @atconway ниже, это будет работать так же, какхорошо:

find . -iname "*.js" -not -iname "*_test.js" -printf '"%p",\n'

Я сохраню вышесказанное, тем не менее, для использования в ситуациях, когда может пригодиться вся мощь регулярных выражений.

0 голосов
/ 06 ноября 2019

Я хотел расширить ансер @JasonVerber, и вот код Node.JS и, следовательно, (я полагаю) кросс-платформенный.

Сначала установите пакет find, а затем сохраните содержимое из некоторого фрагмента file.js. После этого укажите пути, чтобы они разрешали, куда вы не хотите получать ваши файлы и куда помещать полученный файл.

После этого node file-name.js, и это сохранит все найденные пути к файлам в resultPath in result.txt готов к Ctrl+A, Ctrl+C, Ctrl+V.

const find = require('find');
const path = require('path');
const fs = require('fs');

// BEFORE USAGE INSTALL `find` package

// Path to the folder where to look for files
const sourcePath = path.resolve(path.join(__dirname, 'cordova-app', 'src'));
// Path that will be removed from absolute path to files
const pathToRemove = path.resolve(path.join(__dirname, 'cordova-app'));
// Path where to put result.txt
const resultPath = path.resolve(path.join(__dirname, './result.txt'));
// Collects the file paths
const res = [];
// Path with replaced \ onto /
const pathToRemovehReplaced = pathToRemove.replace(/\\/g, '/');

// Get all fils that match a regex
find.eachfile(/\.js$/, sourcePath, file => {
    // First remove all \ with / and then remove the path from root to source so that only relative path is left
    const fileReplaced = file.replace(/\\/g, '/').replace(`${pathToRemovehReplaced}/`, '');
    // Surround with quoutes
    res.push(`"${fileReplaced}"`);
}).end(() => {
    // Write file and concatenate results with newline and commas
    fs.writeFileSync(resultPath, res.join(',\r\n'), 'utf8');
    console.log('DONE!');
});

Результат, полученный при тестировании (/\.ts$/ для регулярных выражений)

"src/app/app.component.spec.ts",
"src/app/app.component.ts",
"src/app/app.module.ts",
"src/environments/environment.prod.ts",
"src/environments/environment.ts",
"src/main.ts",
"src/polyfills.ts",
"src/test.ts"
...