美文网首页
饿了吗大前端阅读(二)

饿了吗大前端阅读(二)

作者: 2林子易2 | 来源:发表于2017-07-17 13:41 被阅读0次

模块

模块机制

模块加载机制官方文档已经说的很明白的,基本的流程是

文件加载规则:js->->json->node
目录加载规则:package.json中的main->index.js->index.node

如果加载为第三方或者系统依赖(就是在node_modules内的),那么从该文件夹内node_modules层层往上查询

一个很有趣的问题就是require相互引用。a引用b,b引用a这样。可能导致的问题是你想用的a或者b的内部某些字段一直为undefined

require没有采用懒加载的方式(AMD、CMD、CommonJS),它实际上时执行了module的方法。因为module是类似于内部封装的函数,所以模块中的this其实是指向module的exports。当然在模块中定义的全局变量,如果引用那么这些也都是全局变量。

所有的require都会存入内存,将require文件名路径作为key,所以不能将require当做一种json文件读取的方式(我以前这么干)。require第一次加载入内存也是一种阻塞调用,加载内存完成后就不是了。
删除模块缓存:

// 删除指定模块的缓存
delete require.cache[moduleName];
// 删除所有模块的缓存
Object.keys(require.cache).forEach(function(key) {
  delete require.cache[key];
})

基本的模块说明都在commonJS规范里面有详细说明了

热更新

这里直接使用饿了吗这段话:
在 Node.js 中做热更新代码, 牵扯到的知识点可能主要是 require 会有一个 cache, 有这个 cache 在, 即使你更新了 .js 文件, 在代码中再次 require 还是会拿到之前的编译好缓存在 v8 内存 (code space) 中的的旧代码. 但是如果只是单纯的清除掉 require 中的 cache, 再次 require 确实能拿到新的代码, 但是这时候很容易碰到各地维持旧的引用依旧跑的旧的代码的问题. 如果还要继续推行这种热更新代码的话, 可能要推翻当前的架构, 从头开始从新设计一下目前的框架.

用空可以去看看他写的热更新的代码:
https://github.com/Lellansin/node-reload/blob/master/lib/reload.js

上下文

Node.js 不给每一个.js文件以独立的上下文来避免作用域被污染?
比较坑的问题

包管理

锁版本

等待更新

lerna:一个用户管理多个包模块的工具。

没时间找这个东西的资料了,不过却看到一本书或许应该看看
深入 React 技术栈

left-pad事件

对模块引用的一种反省

greenkeeper

传送门

相关文章

网友评论

      本文标题:饿了吗大前端阅读(二)

      本文链接:https://www.haomeiwen.com/subject/uymfkxtx.html