• 打包文件复制脚本


    ||版本||更细时间||更新内容||
    || v1.0|| 2020.7.27||上传脚本 ||
    || v1.1|| 2020.7.30||修复build.js报错问题 ||
    || v1.2|| 2020.7.31||修复development环境下执行复制指令的问题 ||

    出于安全考虑,目前代码仓库和部署仓库是分开的。部署时需要手动将打包的文件复制到部署文件夹,可添加打包文件复制脚本减少操作:

    • 插件方式:运行打包指令即可
    • 添加指令方式:需运行打包指令,且等待打包完成,运行打包复制文件指令
    1. 以用户中心代码为例:package.json 添加指令:
    "scripts": {
    	"copy:staging": "node build.js staging user-center",
    	"copy:pro": "node build.js pro user-center"
    }
    

    或安装webpack-hooks-shellscripts插件并修改vue.config.js配置:

    -----------------------------------------------------------------------------------------
    npm install webpack-hooks-shellscripts --save-dev
    -----------------------------------------------------------------------------------------
    plugins: [
          // Ignore all locale files of moment.js
          new webpack.IgnorePlugin(/^./locale$/, /moment$/),
          hooksScriptPlugin({
       	    afterEmit: process.env.VUE_APP_OUTPUT_DIR ? [
                `node build.js ${process.env.VUE_APP_OUTPUT_DIR} user-center`
              ] : []
        })
     ]
    -----------------------------------------------------------------------------------------
    
    
    
    1. 新建与package.json同级文件build.js,代码如下:
    const fs = require('fs')
    
    /**
     * 拷贝文件(源文件和目标文件在同一级目录)
     * @param {*} src 源文件地址
     * @param {*} dist 目标文件地址
     * @param {*} firstDir 是否一级目录
     */
    function copyDir (src, dist, firstDir = true) {
      fs.access(dist, function (err) {
        if (err) {
          // 目录不存在时创建目录
          fs.mkdirSync(dist)
        }
        _copy(null, src, dist)
      })
    
      function _copy (err, src, dist) {
        if (err) {
          throw new Error(err)
        } else {
          fs.readdir(src, function (err, paths) {
            if (err) {     
              throw new Error(err)
            } else {
              let lastestFile = ''
              let lastestDate = ''
              // 找最新创建的文件夹
              paths.forEach(function (path) {
                const _src = src + '/' + path
                var stat = fs.statSync(_src)
                const createTime = new Date(stat.ctime).getTime()
                if (!stat.isFile() && firstDir) {
                  if (createTime > lastestDate) {
                    lastestDate = createTime
                    lastestFile = path
                  }
                }
              })
              // 复制文件
              paths.forEach(function (path) {
                if (firstDir && path !== lastestFile) {
                  return
                }
                const _src = src + '/' + path
                const _dist = dist + '/' + (firstDir && path === lastestFile ? '' : path)
                if (firstDir) {
                  console.log('======================== copy file ========================')
                  console.log('soure fileName: ', _src)
                  console.log('target fileName: ', _dist)
                  console.log('======================== copy file ========================')
                }
                fs.stat(_src, function (err, stat) {
                  if (err) {        
    		          throw new Error(err)
                  } else {
                    // 判断是文件还是目录
                    if (stat.isFile()) {
                      fs.writeFileSync(_dist, fs.readFileSync(_src))
                    } else if (stat.isDirectory()) {
                      // 当是目录是,递归复制
                      copyDir(_src, _dist, false)
                    }
                  }
                })
              })
            }
          })
        }
      }
    }
    
    const env = process.argv[2]
    const dir = `../${process.argv[3]}`
    if (!env || !dir) {
      throw new Error('请添加配置参数')
    }
    copyDir(`./dist/${env}`, `../${dir}`)
    

    若安装插件最后一行代码改为

    copyDir(`./dist/${env}`, `./${dir}`)
    
    1. 打包完后,执行指令(若安装插件,直接打包即可)
    npm run copy:staging
    npm run copy:pro
    
  • 相关阅读:
    对象引用与对象克隆
    谁被回收了
    SpringMVC 返回json
    html基础
    org.hibernate.HibernateException: No Session found for current thread
    VB6之SendMessage模拟拖放事件
    VB6之GIF分解
    VB6之反编译工具VBRezQ
    VB6之WebBrowser控件
    (转载)VB6之鼠标移出事件
  • 原文地址:https://www.cnblogs.com/dhjy123/p/15475395.html
Copyright © 2020-2023  润新知