Nodejs bearcat 热更新方案
Nodejs bearcat 热更新方案
热更新
本次升级主要是优化了热更新,热更新的原理还是基于bearcat IoC 动态替换 javaScript 对象的 prototype 里面的方法,之前热更新watch file是通过nodejs自带的fs.watch实现的,现在版本基于 chokidar 库实现,可以支持多层目录的监听热更新,而不是之前版本的只能监听一级文件夹下面的文件,因为可以直接指定源码文件夹即可(默认就是app目录),更新里面的代码,只要是松散耦合,并不存在引用依赖的,就可以热更新
使用
启动bearcat时传入两个参数
bearcat.createApp([contextPath], {
BEARCAT_HOT: 'on',
BEARCAT_HPATH: 'setup your hot reload source path'
})
- BEARCAT_HOT: 传入 ‘on’ 来开启热更新,默认是关的
- BEARCAT_HPATH: 设置热更新的扫描路径,默认是app文件夹
更多详情还请看官方文档 bearcat hot reload
热更新
本次升级主要是优化了热更新,热更新的原理还是基于bearcat IoC 动态替换 javaScript 对象的 prototype 里面的方法,之前热更新watch file是通过nodejs自带的fs.watch实现的,现在版本基于 chokidar 库实现,可以支持多层目录的监听热更新,而不是之前版本的只能监听一级文件夹下面的文件,因为可以直接指定源码文件夹即可(默认就是app目录),更新里面的代码,只要是松散耦合,并不存在引用依赖的,就可以热更新
使用
启动bearcat时传入两个参数
bearcat.createApp([contextPath], {
BEARCAT_HOT: 'on',
BEARCAT_HPATH: 'setup your hot reload source path'
})
- BEARCAT_HOT: 传入 ‘on’ 来开启热更新,默认是关的
- BEARCAT_HPATH: 设置热更新的扫描路径,默认是app文件夹
更多详情还请看官方文档 bearcat hot reload
[@xieren58](/user/xieren58) 哈哈,改了一个repo的名字
Nodejs bearcat 热更新方案
热更新
本次升级主要是优化了热更新。热更新的原理还是基于 bearcat IoC 动态替换 JavaScript 对象的 prototype
里面的方法。之前热更新 watch file 是通过 Node.js 自带的 fs.watch
实现的,现在版本基于 chokidar 库实现,可以支持多层目录的监听热更新,而不是之前版本的只能监听一级文件夹下面的文件。因为可以直接指定源码文件夹即可(默认就是 app
目录),更新里面的代码,只要是松散耦合,并不存在引用依赖的,就可以热更新。
使用
启动 bearcat 时传入两个参数:
const bearcat = require('bearcat');
bearcat.createApp(['./src'], {
BEARCAT_HOT: 'on',
BEARCAT_HPATH: './src'
}).start();
- BEARCAT_HOT: 传入
'on'
来开启热更新,默认是关的。 - BEARCAT_HPATH: 设置热更新的扫描路径,默认是
app
文件夹。
示例代码
假设我们有一个简单的应用结构如下:
project/
├── src/
│ ├── app.js
│ └── services/
│ └── exampleService.js
└── index.js
index.js
const bearcat = require('bearcat');
bearcat.createApp(['./src'], {
BEARCAT_HOT: 'on',
BEARCAT_HPATH: './src'
}).start();
console.log('Bearcat App started with hot reloading enabled.');
src/app.js
const bearcat = require('bearcat');
bearcat.getBean('exampleService').doSomething();
src/services/exampleService.js
const bearcat = require('bearcat');
bearcat.define('exampleService', function() {
return {
doSomething: function() {
console.log('Doing something...');
}
};
});
module.exports = bearcat;
当修改 exampleService.js
中的代码时,如果开启了热更新,bearcat 将会自动重新加载该模块,而不需要重启整个应用。
更多详情还请看官方文档 bearcat hot reload。
要实现基于 bearcat
的 Node.js 热更新方案,可以通过配置 BEARCAT_HOT
和 BEARCAT_HPATH
参数来启用和指定热更新的扫描路径。下面是一个具体的示例代码:
// 引入必要的库
const bearcat = require('bearcat');
const chokidar = require('chokidar');
// 启动 bearcat 并开启热更新功能
bearcat.createApp(null, {
BEARCAT_HOT: 'on',
BEARCAT_HPATH: './app' // 指定热更新扫描路径
});
// 使用 chokidar 监听文件变化
const watcher = chokidar.watch('./app', {
ignored: /(^|[\/\\])\../, // 忽略隐藏文件
persistent: true,
ignoreInitial: true
});
// 文件发生变化时触发更新
watcher.on('all', (event, path) => {
console.log(`File ${path} has been ${event}`);
// 重新加载模块以进行热更新
delete require.cache[require.resolve(path)];
const module = require(path);
// 更新对象的原型方法
bearcat.refresh(module);
});
解释
- 引入库:首先需要引入
bearcat
和chokidar
。 - 启动 bearcat:使用
bearcat.createApp
方法启动应用,并传入BEARCAT_HOT
和BEARCAT_HPATH
参数以启用热更新并设置扫描路径。 - 监听文件变化:使用
chokidar
监听指定路径下的文件变化。当文件发生变化时,触发事件处理器。 - 文件变化处理:在文件变化时,删除已加载的模块缓存,并重新加载模块。然后调用
bearcat.refresh
方法更新对象的原型方法。
这样就可以实现一个简单的热更新机制。注意这里的热更新仅适用于非依赖紧密耦合的松散代码结构。