node常见概念
非阻塞&异步
node的用处
模块化
文件是互不干扰的 文件之间能相互调用
只有函数才会产生作用域。
join和resolve的区别:
join:拼接
resolve:解析
require是同步的
把文件读成一个字符串,包装成一个自执行函数,函数参数为module,
如何让一个字符串执行
- eval:性能不会隔离作用域
- new Function
- 可以创建一个独立的function:vm.createFunction,而且功能更丰富
require的加载模块原理*
node调试:步骤一步步走 webstorm调试
模块加载的流程 主要看路径是怎么变化的
加载模块,返回module.exports,是否有缓存,
获取扩展名,策略模式找对应的方案
主要流程:
解析路径:获取绝对路径&添加扩展名-》加载该模块(若缓存过就从缓存中取,没有就创建一个新模块new Module并缓存)-》策略模式,读取该文件内容并用函数包裹,传入参数并给exports赋值,我们最后拿到的就是module.exports
手写cjs模块加载原理
同webpack工程原理
根据这个文件创建这个模块,然后导出
***主体流程***
解析文件名:把路径转换成一个绝对路径+扩展名
构建一个模块(缓存模块)
加载模块
返回module.exports
JSON解析
2个问题
经典问题:循环引用问题
会记录{ a:loaded, b:loaded }
但是现在很少问这个了
模块的查找方式
模块的查找方式:
根据路径来区分模块
文件模块:
xxx
第三方:
npm*
node包管理器
name:版本名称
version: 3位
major 主版本 - 大更改
minor 小版本
patch 补丁
标识符
^取到大版本最高的
~
>=
模块区分:
全局模块:只能在命令行中使用
会安装到当前系统npm目录下
一个包:
package.json
+bin:可执行文件
本地调试:npm link 链接到哪里去
局部模块:项目中使用
开发依赖 & 生产依赖
package-lock:安装包固定版本,所有人安装的包版本一致
peerDependencies:同等依赖
scripts: