我正在尝试将 npm 作为构建工具。
我遇到的一个障碍是我需要将 javascript 文件从一个文件夹复制到另一个文件夹。源文件夹包含打字稿文件、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 的脚本部分中仅将具有特定扩展名的文件复制到另一个文件夹?我很确定我忽略了一些显而易见的事情......
警告! cpx 软件包似乎已被放弃。 cpy-cli、copyfiles 和其他解决方案在此处的评论或下面的答案中列出。
cpx 可能是一个很好的替代品。
它有一个 CLI,允许您使用 glob 而不是正则表达式,可以保留目录树,并且在我写这篇文章时相对最新......
还有名为
copyfiles
的 npm 模块
https://github.com/calvinmetcalf/copyfiles
例如将所有
*.css
文件从 ./src
文件夹复制到 ./styles
文件夹:
copyfiles --flat src/*.css styles
快速兼容构建脚本(也适用于 Windows):
"build": "react-scripts build && mv build docs || move build docs",
@powershell copy \"D:/Path/untitled.txt\" destionation-file.txt"
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”
更多信息这里
您可以使用 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'))
});
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
所以你的正则表达式必须匹配所有这些路径和你的文件
我可以在我的脚本命令中使用 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.
我使用 shk 包它是 ShellJS Unix 命令的包装器。
安装 shk 作为 devDependency 并创建一个新的脚本任务:
"scripts": {
"copy": "shx cp wwwroot/scripts/*.js ../destinationFolder"
}