2016-06-25 8 views
22

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

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

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

Что я пытался использовать NCP с фильтром, но я не могу заставить фильтр работать. Я тестировал регулярное выражение, используемое в фильтре, и он работает нормально. Тест проводили в Regex Tester с регулярным выражением .*\.js$ и тестовыми строками, такими как main.ts, main.jsmain.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 

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

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

ответ

38

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

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

+8

Совершенная. Теперь мой скрипт «copy»: «cpx \» scripts/**/*. Js \ "wwwroot/scripts", с devDependency "cpx": "1.3.1". Это именно то, что я искал. –

3

Вы можете использовать gulp.js для этого. Напишите задачу gulp, чтобы изолировать только файлы js (/path/to/files/*.js) и переместить их в пункт назначения по вашему выбору. Для этого потребуется всего несколько строк кода. Включите это в раздел сценария 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')) 
});