命令行模式下的节点ncp复制而不会覆盖(无内容破坏)

时间:2018-10-05 10:36:36

标签: node.js

GNU复制具有-n标志以进行复制而不会被覆盖,如下所示:

cp -n config.ini.dist config.ini

是否可以通过命令行从the npm package ncp获得相同的功能?

我的目的是为npm软件包复制一个分布式配置文件:

"scripts": {
  "prepare": "ncp config.dist.ini config.ini -n",
  ...

但是它不知道-n标志并覆盖现有文件。

2 个答案:

答案 0 :(得分:1)

如果您向下滚动所提供的文档链接的页面,则会发现将clobber选项设置为false可以满足您的要求。

  

options.clobber-布尔值= true。如果设置为false,则ncp不会覆盖已经存在的目标文件。

对于命令行使用,从其源代码中可以看出,CLI不会向CLI公开'clobber'选项。幸运的是,您可以使用自己的小实用程序轻松修复此问题:

//./bin/ncp
#!/usr/env node
const ncp = require('ncp').ncp;

ncp.limit = 16;

// note: also add error handling.  I'm also being explicit here, you can 
//       use their bin file for a more extensive example: https://github.com/AvianFlu/ncp/blob/master/bin/ncp
const source = process.argv[2];
const destination = process.argv[3];

// note you can get fancier and read the options in from the CLI if you want, I'm just assuming you know what you want to always use here. 
ncp(source, destination, { clobber: false }, function (err) {
 if (err) {
   return console.error(err);
   process.exit(1);
 }
 console.log('done!');
 process.exit(1):
});

然后在package.json中,您可以

"scripts": { "prepare": "./bin/ncp config.ini.dist config.ini"}}

希望有帮助。

答案 1 :(得分:0)

您可以在这样的Windows中使用cp

"scripts": {
    "build": "ng build && npm run build:server && npm run cp",
    "build:server": "tsc --build server/tsconfig.json",
    "cp": "@powershell cp server/config.json,server/notice.json dist/server",
...

'@ powershell'将作为powershell命令运行cp