Подтвердить что ты не робот

Как использовать скрипты package.json для копирования файлов с определенным расширением файла

Я пытаюсь сделать npm инструментом сборки.

Один камнем преткновения, с которым я столкнулся, является то, что мне нужно скопировать файлы javascript из одной папки в другую. Исходная папка содержит файлы typescript, файлы javascript и файлы карт, но в целевой папке меня интересуют только файлы javascript.

Я не хочу делать копию для каждого файла, но хочу скопировать все .js файлы. Кроме того, моя исходная папка содержит вложенные папки, которые также содержат файлы javascript. Их также необходимо скопировать и сохранить структуру подпапки.

Я попытался использовать NCP с фильтром, но я не могу заставить фильтр работать. Я тестировал регулярное выражение, используемое в фильтре, и он работает нормально. Тест проводился в Regex Tester с регулярным выражением .*\.js$ и тестовыми строками типа main.ts, main.js main.js.map и т.д., И только строки .js были сопоставлены.

В моем пакете json содержится следующее (сокращенно):

{
    "scripts": {
        "copy": "ncp scripts wwwroot/scripts --filter=\".*(\\\\.js$)\"" 
    }, 
    "devDependencies": { 
        "ncp": "2.0.0.0" 
    }
}

Так как мое регулярное выражение находится в строке в строке, я дважды сбежал от нее. Я также пробовал другие варианты, например:

--filter=/.*\.js$/g       - compilation error
--filter=/.*\\.js$/g      - no files copied
--filter=\".*\\.js$\"     - no files copied
--filter=\"/.*\\.js$/g\"  - no files copied
(no filter)               - all files copied

Я никоим образом не женат на NCP. Если что-то еще работает лучше, я буду использовать это.

Итак: Как мне, внутри раздела сценариев package.json копировать только файлы с определенным расширением в другую папку? Я почти уверен, что упустил что-то ослепительно очевидное...

4b9b3361

Ответ 1

cpx может быть хорошей заменой.

У него есть CLI, который позволяет вам использовать глобы вместо регулярного выражения, может сохранять дерево каталогов и относительно современно, поскольку я пишу это....

Ответ 2

Вы можете использовать gulp.js для этого. Напишите задачу gulp, чтобы изолировать только файлы js (/path/to/files/*.js) и перенести их в пункт назначения по вашему выбору. Для этого потребуется всего несколько строк кода. Включите это в раздел script package.json, если необходимо.

Ссылка на gulp.js: https://gulpjs.com/

var gulp = require('gulp');
gulp.task('jscopy', function(){
  return gulp.src('client/templates/*.js')
    .pipe(gulp.dest('build/js'))
});