基于webpack或者Nodejs打包与压缩

本文介绍如何使用Webpack进行项目压缩打包,并利用Node.js执行shell命令及文件压缩。通过FileManagerWebpackPlugin实现目录下文件的压缩处理,同时利用child_process模块执行打包命令,最后采用archiver模块将指定目录压缩为ZIP文件。

基于webpack来进行目录下的压缩

const FileManagerWebpackPlugin = require("filemanager-webpack-plugin"); // 新的模块需要额外安装
const title = "*****";
plugins: [
  new FileManagerWebpackPlugin({
    events: {
      onEnd: {
        delete: [
          `./zips/${title}-${process.env.NODE_ENV == "production" ? "正式环境" : "测试环境"
          }.zip`
        ],
        archive: [
          {
            source:
              process.env.NODE_ENV == "production" ? "./dist" : "./disttest",
            destination: `./zips/${title}-${process.env.NODE_ENV == "production" ? "正式环境" : "测试环境"
              }.zip`
          }
        ]
      }
    }
  })
]

nodejs执行shell命令进行打包

const exec = require('child_process').exec;
const { dataMode } = require("./data.js");

let maxLen = dataMode.length
let startTime = new Date()
let index = 0
exec2(index)

function exec2(index) {
  let title = dataMode[index].title
  console.log(`${title}】文章打包开始`);
  exec(`set active=${index} && npm run test && npm run build`, function (err, stdout, stderr) {
    if (err) {
      // console.log('运行错误 err', err);
      console.log(`${title}】文章打包错误`);
      console.log(`${title}】文章打包错误 stderr`, stderr);
    } else {
      // console.log('运行成功 stdout', stdout);
      console.log(`${title}】文章打包成功`);
    }
    index++
    if (index < maxLen) {
      exec2(index)
    } else {
      console.log('全部文章打包结束');
      let endTime = new Date()
      console.log(`耗费时间${Math.round((endTime - startTime) / 1000)}s`);
    }
  });
}

基于nodejs文件来进行目录下的压缩

const exec = require('child_process').exec;
const fs = require('fs');
const archiver = require('archiver'); // 新的模块需要额外安装

let startTime = new Date()
exec2()

function exec2() {
  console.log(`文章打包开始`);
  exec(`npm run build`, function (err, stdout, stderr) {
    if (err) {
      // console.log('运行错误 err', err);
      console.log(`文章打包错误`);
      console.log(`文章打包错误 stderr`, stderr);
    } else {
      // console.log('运行成功 stdout', stdout);
      console.log(`文章打包成功`);
    }
    console.log('全部文章打包结束');
    compressZip()
    console.log('文章压缩zip文件开始');
  });
}

function compressZip() {
  var output = fs.createWriteStream('./zips/****.zip');
  var archive = archiver('zip', {
    zlib: { level: 9 } // 设置压缩级别
  });

  archive.on('error', function (err) {
    throw err;
  });

  archive.pipe(output);
  archive.directory('dist/', '/')
  archive.finalize();

  console.log('文章压缩zip文件结束');
  let endTime = new Date()
  console.log(`耗费时间${Math.round((endTime - startTime) / 1000)}s`);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值