编写
copyFile.js脚本实现,将文件夹内所有文件和子文件夹拷贝到另外的文件夹中注意 copyFile.js 属于
后端脚本,需要执行 node copyFile.js 运行
-
引入node环境中自带的两个模块
写文件模块和读文件模块const fs = require('fs'); const path = require('path');
-
以下两段代码是一个整体 :使用方法是直接调用
copyFolde(源文件相对路径,复制目标的相对路径)函数-
将源文件拷贝到目标文件:
//!将srcPath路径的文件复制到tarPath cd为回调 var copyFile = function(srcPath, tarPath, cb) { var rs = fs.createReadStream(srcPath); rs.on('error', function(err) { if (err) { console.log('read error', srcPath); } cb && cb(err); }) var ws = fs.createWriteStream(tarPath); ws.on('error', function(err) { if (err) { console.log('write error', tarPath); } cb && cb(err); }) ws.on('close', function(ex) { cb && cb(ex); }) rs.pipe(ws); }
-
将源文件夹下所有的文件和子文件夹,拷贝到目标文件夹下
//! 将srcDir文件下的文件、文件夹递归的复制到tarDir下 cd为回调 var copyFolder = function(srcDir, tarDir, cb) { fs.readdir(srcDir, function(err, files) { var count = 0; var checkEnd = function() { ++count == files.length && cb && cb(); } if (err) { checkEnd(); return; } files.forEach(function(file) { var srcPath = path.join(srcDir, file); var tarPath = path.join(tarDir, file); fs.stat(srcPath, function(err, stats) { if (stats.isDirectory()) { console.log('mkdir', tarPath); fs.mkdir(tarPath, function(err) { if (err) { console.log(err); return; } copyFolder(srcPath, tarPath, checkEnd); }); } else { copyFile(srcPath, tarPath, checkEnd); } }); }); //为空时直接回调 files.length === 0 && cb && cb(); }); }
-
-
copyFile.js是基于node.js编写的后端脚本,哪问题来了,如何将后端脚本在Vue项目中运行,众所周知在Vue中启动项目是执行
npm run xxx而copyFile.js的命令是node copyFile.js- 方案一:在同一个项目中打开
两个命令行窗口分别执行npm run xxx和node copyFile.js效果作用在同一个项目中
- 方案一:在同一个项目中打开
-
打开两个窗口又是执行两个命令,方案一太麻烦了。有没有什么方法只需要执行
npm run xxx命令 便可达到方案一的效果-
npm run xxx:会执行pakeage.json中在scripts中写的脚本命令,这些脚本就是node_modules/.bin中的文件名
-
方案二:设置启动多条命令 在
package.json文件中配置如果命令中包括空格,则需要使用
()将命令包含起来。此外&&与&的作用也不同。"scripts": { "serve": "(node copyFile.js) && (vue-cli-service serve)", "start": "webpack & (ng serve)" },- ➊ 命令先后顺利执行。先执行
node copyFile.js,该命令执行完毕后再执行vue-cli-service serve - ➋ 命令一并执行。同时执行
webpack以及ng serve两个命令
- ➊ 命令先后顺利执行。先执行
-
注意:以上方式只会复制文件,如果想修改之后。在执行命令覆盖目标文件则需要使用 # sync-copydir 执行完成后,命令行窗口不会有提示,需要看文件是否覆盖成功。