如何使用 package.json 脚本复制具有特定文件扩展名的文件

How to use package.json scripts to copy files with specific file extension

我正在尝试将 npm 作为构建工具。

我遇到的一个绊脚石是我需要将 javascript 个文件从一个文件夹复制到另一个文件夹。源文件夹包含打字稿文件、javascript 文件和地图文件,但在目标文件夹中我只对 javascript 文件感兴趣。

我不想为每个文件都创建一个复制语句,但想复制所有 .js 文件。此外,我的源文件夹包含的子文件夹也包含 javascript 个文件。这些也需要复制,并保持子文件夹结构。

我试过的是使用 NCP with a filter, but I cannot get the filter to work. I have tested the regex used in the filter and it appears to work fine. The test was done at Regex Tester 和正则表达式 .*\.js$main.tsmain.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 的脚本部分中仅将具有特定扩展名的文件复制到另一个文件夹?我很确定我忽略了一些非常明显的东西......

警告! cpx 包似乎已被放弃。 cpy-cli、复制文件和其他解决方案在此处的评论或下面的答案中列出。

cpx 可能是一个很好的替代品。

它有一个 CLI,允许您使用 globs 而不是 regex,可以保留目录树,并且在我写这篇文章时相对来说是最新的....

您可以为此使用 gulp.js。 编写一个 gulp 任务以仅隔离 js 文件 (/path/to/files/*.js) 并将其移动到您选择的目的地。 它只需要几行代码。 如有必要,请将其包含在 package.json 的脚本部分中。

link到gulp.js:https://gulpjs.com/

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

还有一个名为 copyfiles 的 npm 模块 https://github.com/calvinmetcalf/copyfiles

例如将所有 *.css 文件从 ./src 文件夹复制到 ./styles 文件夹:

copyfiles --flat src/*.css styles

ncp 递归复制,因此在复制文件之前它会检查目录是否匹配过滤器,例如:

d:\path\to\app\src\server
d:\path\to\app\src\server\middleware
d:\path\to\app\src\server\middleware\cool-middleware.js
d:\path\to\app\src\server\middleware\cool-middleware.js.map

所以你的正则表达式必须匹配所有这些路径和你的文件

快速兼容性构建脚本(也适用于 Windows):

"build": "react-scripts build && mv build docs || move build docs",
@powershell copy \"D:/Path/untitled.txt\"  destionation-file.txt"

我可以在我的脚本命令中使用 cp:

"build": "npx babel src --out-dir dist && cp ./src/*.css ./dist",

如果您的分发包已经在 /dist 文件夹中,这将起作用。您还可以添加另一个命令来复制它,然后甚至 运行 发布命令。

I use this in Git bash in windows which has the cp command available. The comments are correct that you will need this in your underlying shell/command prompt. It should be able to be modeled and updated for your OS.

Windows 用户:

// Copy file
xcopy c:\workfile d:\test

// Copy folders incl. sub folders
xcopy <source> <destination> /e

// If folder name has space in name use double quotes
xcopy c:\workfile “d:\test new”

更多信息here