活用package.json脚本,用node拷贝文件到指定目录

在项目中遇到需要将前端项目打包后的dist目录拷贝到指定目录,不想每次都手动拷贝,可以考虑在package.json中加个脚本,例如下面的build脚本,&&后面添加的部分 (&&表示执行完前面脚本开始执行后面脚本,可以添加多个&&)

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config ./webpack/webpack.pro.conf.js && node ./copyDistToSdk.js"
}

copyDistToSdk.js 内容如下:

const fs = require('fs');
const path = require('path');

// 拷贝js文件
function copyJSFiles(sourceDir, targetDir) {
  // 读取源文件夹中的文件列表
  const files = fs.readdirSync(sourceDir);

  // 遍历文件列表
  files.forEach(file => {
    const sourcePath = path.join(sourceDir, file);
    const targetPath = path.join(targetDir, file);

    // 获取文件信息
    const stats = fs.statSync(sourcePath);

    // 如果是目录,则递归调用 copyJSFiles
    if (stats.isDirectory()) {
      fs.mkdirSync(targetPath);
      copyJSFiles(sourcePath, targetPath);
    }
    // 如果是以 .js 后缀的文件,则进行拷贝操作。如果不需要判断文件后缀,可以直接写else
    else if (path.extname(file) === '.js') {
      fs.copyFileSync(sourcePath, targetPath);
      console.log(`Copied: ${sourcePath} to ${targetPath}`);
    }
  });
}

// 调用函数,设置源文件夹和目标文件夹路径
const sourceFolder = path.join(__dirname, '/dist');
const targetFolder_js = path.join(process.cwd(), '..', '..', 'public/static/js');
// process.cwd()表示到根目录下,目标目录 加两次".."(代表../../ 返回项目根目录)  
// 如果目标层级不变 可以直接写 path.join(process.cwd(), 'public/static/js');
copyJSFiles(sourceFolder, targetFolder_js);

这样每次build之后,脚本会自动拷贝dist文件,减少手动操作

偷懒也是提高效率的动力

你可能感兴趣的:(javascript,前端,node.js)