我正在尝试将npm作为构建工具。
我遇到的一个绊脚石是我需要将javascript文件从一个文件夹复制到另一个文件夹。源文件夹包含打字稿文件,javascript文件和地图文件,但在目标文件夹中我只对javascript文件感兴趣。
我不想为每个文件创建一个copy-statement,但是想要复制所有.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的脚本部分中仅将具有特定扩展名的文件复制到另一个文件夹?我很确定我忽略了一些非常明显的事情......
答案 0 :(得分:64)
cpx可能是一个很好的替代品。
它有一个CLI,允许你使用globs而不是正则表达式,可以保存目录树,并且在我写这个时它是相对最新的....
答案 1 :(得分:10)
还有名为copyfiles
的npm模块
https://github.com/calvinmetcalf/copyfiles
E.g。将所有*.css
文件从./src
文件夹复制到./styles
文件夹:
copyfiles --flat src/*.css styles
答案 2 :(得分:5)
快速兼容性构建脚本(也适用于Windows):
"build": "react-scripts build && mv build docs || move build docs",
答案 3 :(得分:2)
@powershell copy \"D:/Path/untitled.txt\" destionation-file.txt"
答案 4 :(得分:1)
你可以使用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'))
});
答案 5 :(得分:0)
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
因此您的正则表达式必须匹配所有这些路径,并且文件也必须匹配
答案 6 :(得分:0)
我可以在我的脚本命令中使用 cp:
"build": "npx babel src --out-dir dist && cp ./src/*.css ./dist",
如果您的分发包已经在 /dist 文件夹中,这将起作用。您还可以添加另一个命令来复制它,然后甚至运行发布命令。