作家
登录

在Node.js中看JavaScript的引用

作者: 来源: 2017-04-11 09:02:23 阅读 我要评论

早期进修 Node.js 的时刻 (2011-2012),有挺多是大年夜 PHP 转过来的,当时有部分人对于 Node.js 编辑完代码须要重启一下表示麻烦(PHP不须要这个过程),于是社区里的同伙就开端倡导应用 node-supervisor 这个模块来启动项目,可以编辑完代码之后主动重启。不过相对于 PHP 而言依旧不敷便利,因为 Node.js 在重启今后,之前的高低文都损掉了。

在Node.js中看JavaScript的引用

固然可以经由过程将 session 数据保存在数据库或者缓存中来削减重启过程中的数据损掉,不过如不雅是在临盆的情况下,更新代码的重启间隙是没法处理请求的(PHP可以,别的那个时刻 Node.js 还没有 cluster)。因为这方面的问题,加上本人是大年夜 PHP 转到 Node.js 的,于是大年夜那时开端思虑,有没有办法可以在不重启的情况下热更新 Node.js 的代码。

a.js

  1. var express = require('express'); 
  2. var b = require('./b.js');  
  3. var app = express();  
  4. app.get('/'function (req, res) { 
  5.   b = require('./b.js'); 
  6.   res.send(b.num); 
  7. });  
  8. app.listen(3000); 

b.js

  1. exports.num = 1024; 

两个 JS 文件写好之后,大年夜 a.js 启动,刷新页面会输出 b.js 中的 1024,然后修改 b.js 文件中导出的值,例如修改为 2048。再次刷新页面依旧是本来的 1024。

而在 JavaScript 中:

再次履行一次 require 并没有刷新代码。require 在履行的过程中加载完代码之后会把模块导出的数据放在 require.cache 中。require.cache 是一个 { } 对象,以模块的绝对路径为 key,该模块的具体数据为 value。于是便开端做如下测验测验:

a.js

  1. var path = require('path'); 
  2. var express = require('express'); 
  3. var b = require('./b.js');  
  4. var app = express();  
  5. app.get('/'function (req, res) { 
  6.   if (true) { // 检查文件是否修改 
  7.     flush(); 
  8.   } 
  9.   res.send(b.num); 
  10. });  
  11. function flush() { 
  12.   delete require.cache[path.join(__dirname, './b.js')]; 
  13.   b = require('./b.js'); 
  14.  
  15. app.listen(3000); 

再次 require 之前,将 require 之上关于该模块的 cache 清理掉落后,用之前的办法再次测试。结不雅发明,可以成功的刷新 b.js 的代码,输出新修改的值。

懂得到这个点后,就想经由过程该道理实现一个无重启热更新版本的 node-supervisor。在封装模块的过程中,出于情怀的原因,推敲供给一个类似 PHP 中 include 的函数来代替 require 去惹人一个模块。实际内部依旧是应用 require 去加载。以b.js为例,本来的写法改为 var b = include(‘./b’),在文件 b.js 更新之后 include 内部可以主动刷新,让外面拿到最新的代码。

  1. var include = require('./include'); 
  2. var express = require('express'); 
  3. var b = include('./b.js'); 
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      移动互联网人口红利逐渐消退 华为Hi-Star晨星计划一触即发

    【51CTO.com原创稿件】 据懂得,在2016岁尾,我国移动智能终端范围冲破13.7亿台,跟着人口红利减退,充分盘活、经营现有流量便成为了各行各业全新的机会与挑衅。经由过程近几年互联网手机>>>详细阅读


    本文标题:在Node.js中看JavaScript的引用

    地址:http://www.17bianji.com/lsqh/34702.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)