web-dev-qa-db-ja.com

package.jsonスクリプトを使用して特定のファイル拡張子を持つファイルをコピーする方法

ビルドツールとしてnpmを試しています。

私が遭遇した一つのつまずきは、JavaScriptファイルをあるフォルダーから別のフォルダーにコピーする必要があることです。ソースフォルダーにはTypeScriptファイル、javascriptファイル、マップファイルが含まれていますが、ターゲットフォルダーにはjavascriptファイルのみが必要です。

各ファイルのコピー文を作成したくありませんが、すべての.jsファイルをコピーしたいと思います。また、ソースフォルダーには、javascriptファイルも含むサブフォルダーが含まれています。これらもコピーする必要があり、サブフォルダー構造を維持します。

私が試みたのは、フィルターで NCP を使用することですが、フィルターを機能させることができません。フィルターで使用されている正規表現をテストしましたが、正常に動作するようです。テストは Regex Tester で行われ、正規表現.*\.js$main.tsmain.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

私は決してNCPと結婚していません。他の何かがうまく機能する場合は、それを使用します。

だから:package.jsonのスクリプトセクション内で、特定の拡張子を持つファイルのみを別のフォルダーにコピーするにはどうすればよいですか?私は目がくらむほど明らかな何かを見落としていると確信しています...

36

cpx が適切な代替手段になる場合があります。

CLIがあり、正規表現の代わりにグロブを使用でき、ディレクトリツリーを保持でき、これを書いている時点では比較的最新です。

66

copyfilesというnpmモジュールもあります https://github.com/calvinmetcalf/copyfiles

例えば。すべての*.cssファイルを./srcフォルダーから./stylesフォルダーにコピーするには:

copyfiles --flat src/*.css styles
12
asdfasdfads

これには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'))
});
1
Zer0