上一期写了一些问题。
原计划是暂时不作处理的,最终结果就是今天没忍住鸭。
废话很少说先贴思路vue
1.先进行本地编译 2.编译完成后,利用chokidar分别监听源码文件以及编译后的文件。(源码改动,触发编译。编译后的文件发生改动,触发重载) 3.开启node服务 4.开启browserSync代理服务
npm //执行脚本命令 browser-sync //刷新浏览器的核心 chokidar //监听文件的修改 child_process //开启子进程 执行脚本
直接使用npm对象执行写好的命令node
function directives(commond,cb){ npm.load(function(){ //清除缓存 npm.commands.cache(['clean'], function(){ npm.commands.run([commond],cb); }) }) } //执行 npm run dev function dev(cb){ return directives('dev',function(){ cb && cb(); }) }
chokidar能够监听文件。具体去看文档嘛git
chokidar的change事件,只要你进行保存就会触发 无论你有没有发生改变。github
//监听源码部分 //监听源码函数,发生改变 开启子进程 执行编译命令 function soundCode(cb){ console.log(`${num+=1}.chokidar开始监听src&public下的文件`) const warcher = .watch(['src/**/*.*','public/**/*.*']) warcher.on('all', (event, path) => { if(event ==='change'){ console.log('\033[40;31m '+path+'源码发生修改,进行编译,请稍后'); //开启子进程并执行命令 child_process.exec('npm run dev',function(error, stdout, stderr){ if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log(stdout); console.log('编译完成'); }) } }); console.log('\033[40;32m 源码监听完成'); } // 监听编译后的代码(js)是否发生改变(不如说是进行保存) //监听distDev下的文件 编译后的代码 function compileCompleteCode(cb){ console.log(`${num+=1}.chokidar开始监听distDev下的文件`); //该文件产生变化时 说明构建已完成。 const watcher = chokidar.watch('distDev/**/*.js'); watcher.on('all', (event, path) => { if(event === 'change'){ console.log(path+'发生变化,开始进行热更新'); bs.reload(path); console.log('热更新已完成'); } }); console.log('\033[40;32m 编译后的代码监听完成'); }
directives('devServer');
bs.init({ proxy: 'http://localhost:8080', open: false });
const npm = require('npm'); const bs = require('browser-sync').create(); const chokidar = require('chokidar'); const child_process = require('child_process') var num = 0;//计数 function directives(commond,cb){ npm.load(function(){ npm.commands.cache(['clean'], function(){ npm.commands.run([commond],cb); }) }) } function dev(cb){ return directives('dev',function(){ cb && cb(); }) } //监听源码函数 function soundCode(cb){ console.log(`${num+=1}.chokidar开始监听src&public下的文件`) const warcher = chokidar.watch(['src/**/*.*','public/**/*.*']) warcher.on('all', (event, path) => { if(event ==='change'){ console.log('\033[40;31m '+path+'源码发生修改,进行编译,请稍后'); child_process.exec('npm run dev',function(error, stdout, stderr){ if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log(stdout); console.log('编译完成'); }) } }); console.log('\033[40;32m 源码监听完成'); } //监听distDev下的文件 编译后的代码 function compileCompleteCode(cb){ console.log(`${num+=1}.chokidar开始监听distDev下的文件`); //该文件产生变化时 说明构建已完成。 const watcher = chokidar.watch('distDev/**/*.js'); watcher.on('all', (event, path) => { if(event === 'change'){ console.log(path+'发生变化,开始进行热更新'); bs.reload(path); console.log('热更新已完成'); } }); console.log('\033[40;32m 编译后的代码监听完成'); } console.log(`${num+=1}.进行本地编译`); dev(function(){ console.log("\033[40;31m 编译完成") soundCode() compileCompleteCode() console.log(`${num+=1}开启node服务`) directives('devServer'); console.log(`${num+=1}开启browserSync代理服务`); bs.init({ proxy: 'http://localhost:8080', open: false }); });
项目github地址
项目公网地址vuex
1) vueSSR: 从0到1构建vueSSR项目 --- 初始化
2) vueSSR: 从0到1构建vueSSR项目 --- 路由的构建
3) vueSSR: 从0到1构建vueSSR项目 --- node以及vue-cli3的配置
4) vueSSR: 从0到1构建vueSSR项目 --- vuex的配置(数据预取)
5) vueSSR: 从0到1构建vueSSR项目 --- 开发环境的部署
6) vueSSR: 从0到1构建vueSSR项目 --- 伪热更新vue-cli