Node概念: runtime 运行时, 可以让我们的js运行在服务端 (底层用的是v8引擎构建的)
- 特点:node = js + 内置模块 + 第三方模块
- 非阻塞i/o (异步的非阻塞)
- i/o就是文件的读写
- 事件驱动
- 支持js语法, 不支持bom和dom, 内置模块
require循环引用
- commonjs规范中不会发生死循环, 只会加载已经加载的部分
- 解决办法:采用非强制的依赖关系
- 第一次运行a模块的时候 会将a的模块进行缓存,并且此时a模块的状态
loaded:false - b在去加载a 发现a的loaded属性依旧是false,死循环,直接将a现在已经有的
module.exports返回
模块加载
- 内置模块 loadNativeModule
- 第三方模块 paths 一般安装到node_modules下的
- 自定义文件模块 ./ ../相对路径写的这种
- 如果引入的模块是一个内置模块,直接返回即可,
- 第三方模块从node_modules目录下查找,没有则递归向上查找是否存在模块
- 找到了node_module 则会找到文件夹下同名的文件夹,看这个文件夹里的package.json的main属性指向的文件
- 文件模块,通过./ ../引入,或者绝对路径引入的资源。 如果文件不存在会尝试添加.js .json .node
- 如果仍然未找到就报错了
包管理工具
- 包管理工具不能混用
- 用来安装模块:有两种方式
- 全局安装(全局安装是只能在命令行中使用,不是在项目中使用)
- npm install time -g (不能再代码中使用)
- windows 想让命令可以再全局下执行 需要配置全局环境变量
- 本地安装(在项目中使用的)
- 全局安装(全局安装是只能在命令行中使用,不是在项目中使用)
- npm 这个是安装node送的,嘻嘻
- nvm 用来切换npm的版本
- npx 命令是npm 5.2之后提供的(命令不存在会安装使用再销毁)
- nrm(.npmrc) nrm use npm 将源切换到官方进行发包(镜像)
- yarn
- pnpm
- cnpm
包的依赖和版本
- 本地包 可以在代码中使用
- dependencies
npm install gulp --save就是开发+上线都需要的npm install gulp -Snpm install gulp
- devDependencies
npm install gulp --save-dev开发时需要,上线不需要npm install gulp -D
- 版本管理
- semver 一个版本规范,用来描述版本的
- major 主版本
- minor 小版本
- patch 补丁版本
- 预发版本 做测试的
- 1.0.0-alpha.4 内部测试的
- 1.0.0-beta.1 公开测试
- 1.0.0-rc.2 马上可以正式发布了 目前版本是rc
- 版本号标识符
^2.2.0主版本必须是2开头~1.1.0主版本和小版本必须是 1.1开头的>=2.2.0小于x.x.x版本都可以<=2.2.0大于x.x.x版本都可以1.0.0-2.0.0描述范围之间的版本
package.json和package-lock.json的区别
Buffer
- node中处理二进制数据的对象