问题的前提是这样的, vue多模块项目(打包是命令循环那种), 所有模块都引用了一个公共文件,
这个公共文件需要独立打包成一个 库。然后 所有模块在html里引入它。
package.json
"scripts": {
"serve": "vue-cli-service serve",
"start": "npm run serve",
"build": "node ./build/build.js",
"build:all": "node ./build/build.js --all",
"build:nomock": "node ./build/build.js -m nomock --all",
"build:base": "vue-cli-service build --target lib --dest ./static/cmobilebase --name cmobilebase ./cmobilebase/index.js",
"lint": "vue-cli-service lint"
},
vue.config.js 里面 会判断开发模式,然后执行如下 代码。。目的是:希望监听某个文件夹代码改变,然后自动 执行另一个打包 命令"build:base"。
const fs = require('fs'),
md5 = require('md5');
const path = require('path');
let preveMd5 = null,
fsWait = false
const filePath = path.join(__dirname, '../cmobilebase/');
console.log(`正在监听 ${filePath}`);
function watch(){
var exec=require('child_process').execSync;
fs.watch(filePath,{recursive:true},(event,filename)=>{
if (filename){
if (fsWait) return;
fsWait = setTimeout(() => {
fsWait = false;
}, 100)
var currentMd5 = md5(fs.readFileSync(filePath + filename))
console.log(currentMd5,preveMd5)
if (currentMd5 == preveMd5){
return
}
preveMd5 = currentMd5
console.log(`${filePath}文件发生更新`)
exec('npm run build:base',{stdio:'inherit'});
}
})
}
module.exports = {watch}
但是实际效果是,文件改变并打包后,8080端口的开发预览 就没反应了。