Node.js学习笔记

判断是否是程序的入口文件有两种方式

  • require.main === module(推荐)
  • module.parent === null

exports 和 module.exports 的区别

  1. module.exports 初始值为一个空对象 {}
  2. exports 是指向的 module.exports 的引用
  3. require() 返回的是 module.exports 而不是 exports

设置环境变量

  • Mac 和 Linux
NODE_ENV=test node app
  • Windows
set NODE_ENV=test
node app
  • 通用方式
// 全局
npm i cross-env -g
cross-env NODE_ENV=test node app
// 非全局,修改package.json,npm start方式启动
npm i cross-env
{
    "scripts": {
        "start": "cross-env NODE_ENV=production node app"
    }
}

语义化版本(semver)

semver 格式:主版本号.次版本号.修订号

  • 主版本号:做了不兼容的 API 修改
  • 次版本号:做了向下兼容的功能性新增
  • 修订号:做了向下兼容的 bug 修正

npm init

npm init 有智能的默认选项,比如从根目录名称推断模块名称,通过 ~/.npmrc 读取你的信息,用你的 Git 设置来确定 repository 等等。

锁定版本

npm i express --save --save-exact (安装 express,同时将 "express": "4.14.0" 写入 dependencies )
运行npm config set save-exact true
这样每次 npm i xxx --save 的时候会锁定依赖的版本号,相当于加了 --save-exact 参数。

小提示:npm config set 命令将配置写到了 ~/.npmrc 文件,运行 npm config list 查看。

npm scripts

npm 的 scripts 有一些内置的缩写命令,如常用的:

  • npm start 等价于 npm run start
  • npm test 等价于 npm run test

npm shrinkwrap

为了彻底锁定依赖的版本,让应用在任何机器上安装的都是同样版本的模块(不管嵌套多少层),通过运行 npm shrinkwrap,会在当前目录下产生一个 npm-shrinkwrap.json,里面包含了通过 node_modules 计算出的模块的依赖树及版本。
只要目录下有 npm-shrinkwrap.json 则运行 npm install 的时候会优先使用 npm-shrinkwrap.json 进行安装,没有则使用 package.json 进行安装。

会话

cookie 与 session 的区别

  1. cookie 存储在浏览器(有大小限制),session 存储在服务端(没有大小限制)
  2. 通常 session 的实现是基于 cookie 的,即 session id 存储于 cookie 中

通过引入 express-session 中间件实现对会话的支持:

app.use(session(options))

session 中间件会在 req 上添加 session 对象,即 req.session 初始值为 {},当我们登录后设置 req.session.user = 用户信息,返回浏览器的头信息中会带上 set-cookie 将 session id 写到浏览器 cookie 中,那么该用户下次请求时,通过带上来的 cookie 中的 session id 我们就可以查找到该用户,并将用户信息保存到 req.session.user。

你可能感兴趣的:(Node.js学习笔记)