node-好好学习篇

48 阅读2分钟

Node概念: runtime 运行时, 可以让我们的js运行在服务端 (底层用的是v8引擎构建的)

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

  1. node中处理二进制数据的对象