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

Tho*_*sen 40 build-tools npm package.json

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

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

我不想为每个文件创建一个copy-statement,但是想要复制所有.js文件.此外,我的源文件夹包含也包含javascript文件的子文件夹.这些也需要复制,并维护子文件夹结构.

我尝试过使用NCP和过滤器,但我无法使用过滤器.我已经测试了过滤器中使用的正则表达式,它似乎工作正常.测试在做正则表达式测试仪用正则表达式.*\.js$和测试串状main.ts,main.js main.js.map等等,只有.js文件的字符串相匹配.

我的包json包含以下(缩写):

{
    "scripts": {
        "copy": "ncp scripts wwwroot/scripts --filter=\".*(\\\\.js$)\"" 
    }, 
    "devDependencies": { 
        "ncp": "2.0.0.0" 
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我的正则表达式是一个字符串中的字符串,我已经双重转义它.我也尝试了其他变体,例如:

--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
Run Code Online (Sandbox Code Playgroud)

我与NCP没有任何关系.如果其他东西效果更好,那么我会用它.

那么:我如何在package.json的脚本部分中仅将具有特定扩展名的文件复制到另一个文件夹?我很确定我忽略了一些令人眼花缭乱的事情......

Mat*_*tis 69

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

它有一个CLI,允许你使用globs代替正则表达式,可以保存目录树,并且在我写这篇文章时是相对最新的....

  • 完善.现在我的脚本是"copy":"cpx \"scripts/**/*.js \"wwwroot/scripts",devDependency"cpx":"1.3.1".这正是我想要的. (10认同)
  • 目前,cpx似乎已被遗弃,并且在依赖项中存在开放漏洞。我建议基于[cpy](https://github.com/sindresorhus/cpy)使用[cpy-cli](https://github.com/sindresorhus/cpy-cli)。 (3认同)

asd*_*ads 14

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

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

copyfiles --flat src/*.css styles
Run Code Online (Sandbox Code Playgroud)

  • @Woppi我的理由是,因为它使用OS命令,这可能不适用于其他操作系统. (11认同)
  • @Coo我明白了.非常感谢您分享您的推理.欣赏它. (3认同)
  • 为什么不只是`cp -R`?我正在使用cp -R ./email/templates。/ build / email`,只是对您的解决方案感到好奇。 (2认同)

小智 6

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

"build": "react-scripts build && mv build docs || move build docs",
Run Code Online (Sandbox Code Playgroud)

  • 所以只需将其更改为`cp build docs || 复制构建文档` (3认同)
  • 这将移动而不是复制 (2认同)

Sor*_*ean 5

@powershell copy \"D:/Path/untitled.txt\"  destionation-file.txt"
Run Code Online (Sandbox Code Playgroud)

  • 编辑答案以包含该信息,并注意未安装 PowerShell 的系统将如何响应这行代码以及是否有办法缓解这种情况,这将很有用。 (4认同)
  • @JasonAller Powershell 可以跨平台使用 https://learn.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-70?view=powershell-7#where-can -i-安装-powershell (3认同)