初始npm

112 阅读5分钟

认识 npm

  • 认识 npm

    • 一个 基于 node 环境的 包管理器
  • npm 的安装

    • 不需要安装, 只要安装了 node, 自动安装 npm
  • npm 的检测

    • 打开命令行, 目录无所谓
    • 输入指令: npm --version || npm -v
  • npm 的作用

    • 下载一切和 js 相关的 第三方
    • 相当于是一个 "软件"
    • 只不过这个 "软件" 没有 图标, 没有 UI 界面
    • 依赖 命令行 进行操作

npm 的基本使用

  1. npm 初始化
    • 切换到项目根目录, 打开 cmd 输入 npm init
      • package name: 项目名; 默认文件目录名 不支持中文和空格
      • version: 项目初始版本; 默认 1.0.0 通常第一版为 0.0.1 或者 0.1.0
      • description: 项目描述, 属于一段描述你这个项目的内容即可
      • entry point: 项目入口, 默认为 index.js 一般后端需要用到
      • keywords: 关键字
      • author: 作者
    • 切换到项目根目录, 打开 cmd 输入 npm init --yes || npm init -y
      • 所有选项均按照默认值配置
  2. npm 下载第三方
    • 切换到项目根目录, 输入指令 npm install 包名
    • 切换到项目根目录, 输入指令 npm i 包名
    • 下载安装后默认会多一个 package-lock.json 文件与 node_modules 文件夹
    • 下载时, 会去下载指定的第三方包, 如果第三方包用到了其他的第三方包, 会一起下载到 node_modules 中
    • 下载完毕后, 会自动记录在 package.json 中
  3. npm 查看第三方可下载版本
    • 打开 cmd, 目录无所谓
    • 输入命令: npm view 包名 versions
    • 会把该第三方包 所有的 可下载版本, 展示出来
  4. npm 下载指定版本的第三方
    • 打开 cmd, 切换到项目根目录, 输入指令 npm install 包名@版本号 || npm i 包名@版本号
    • 注意: 安装时, package 中只会记录一个, 后续安装的, 会顶替掉之前安装的
    • 版本号可以写完整版本号, 也可以写 大版本号, 会默认下载该大版本内最新的稳定版
  5. npm 删除第三方
    • 打开 cmd, 切换到项目根目录
    • 输入指令 npm unstall 包名 || npm un 包名
    • 会删除该第三方包的本地文件, 并且删除 package.json 文件内的记录
  6. npm 统一下载所有第三方
    • 打开 cmd, 切换到项目根目录
    • 输入指令 npm install || npm i
    • 注意! 项目根目录需要有 package.json
    • 会自动读取 package.json 内记录的第三方包, 一次性全部下载安装
  7. npm 清除缓存
    • 清除下载缓存
      • 打开 cmd, 目录无所谓
      • 输入指令: npm cache clear -f
    • 清除本地缓存
      • C 盘
      • 用户
      • 你的用户名
      • AppData
      • Roaming
      • npm-cache
  8. 修改镜像源地址
    • 修改 npm 第三方包的下载地址
    • 打开命令行, 目录无所谓
    • 输入指令: npm config set registry registry.npmmirror.com

npm 第三方包的使用

  • 在引入第三包的时候, 会先查看是否为 内置模块, 如果是, 直接导入使用, 没有的话, 检索是否为第三方包
  • 检索时, 会按照 module.path 数组内的路径, 从下标 0 开始查找, 找到就是用, 找不到就报错
const _ = require("lodash");
var objects = [{ a: 1 }, { b: 2 }];

var deep = _.cloneDeep(objects);
console.log(deep, objects);
console.log(deep[0] === objects[0]);

var object = { a: 1 };
var other = { a: 1 };
console.log(_.eq(object, object)); // true
console.log(_.eq(object, other)); // false
console.log(_.eq("a", "a")); // true

认识 nodemon

  • nodemon 第三方包
    • 是一个 "软件"
    • 作用: 仅仅是为了取代 node xxx.js 这个命令
  • node xxx.js 与 nodemon xxx.js 启动的区别
    • node:
      • 启动后, 如果后续有变化, 需要手动重启服务器
    • nodemon:
      • 启动后, 如果后续有变化, 保存代码后, 终端自动重启
  • nodemon 安装
    • win: npm install --global nodemon || npm i -g nodemon
    • MAC: sudo npm install --global nodemon
  • nodemon 检测
    • 打开命令行 目录无所谓
    • 输入命令 nodemon --version || nodemon -v
  • nodemon 卸载
    • win: npm uninstall --global nodemon || npm un -g nodemon
    • MAC: sudo npm uninstall --global nodemon
  • nodemon 使用
    • 和 node 运行文件的使用操作是一样的
    • 打开命令行, 切换目录到你需要执行的 JS 文件所在的目录
    • 输入指令: nodemon 文件名

初识 express

  • 是一个 node 的第三方开发框架
    • 把启动服务器包括操作的一系列内容进行的完整的封装
    • 在使用之前, 需要下载第三方
    • 指令: npm install express
  1. 基本搭建
// 0. 下载: npm install express

// 0. 导入
const express = express();

// 1. 创建服务器
const server = express();

// 2. 给服务器配置监听端口号
server.listen(8080, () => {
    console.log("服务器启动成功");
});
  1. 配置静态资源
  • 之前:
    • 约定:
      • 所有静态资源以 /static 开头
      • 按照后面给出的文件名自己去组装的路径
    • 组装:
      • 准备了初始目录 './client/'
      • 按照后缀去添加二级目录
      • 按照文件名去查找内容
    • 例子: /static/index.html
      • 自动去 './client/views/index.html'
  • 现在:
    • 约定:
      • 所有静态资源以 /static 开头
    • 按照 /static 后面的路径去访问指定文件
    • 要求: 在 /static 以后的内容需要按照 二级路径的正确方式书写
      • 假设你需要请求的是 './client/views/index.html' 文件
      • 你的请求地址需要书写 '/static/views/index.html'
  • 语法:
    1. express.static('开放的静态目录地址')
    2. server.use('访问这个地址的时候', 去到开放的静态目录地址)
// 0. 下载: npm install express
// 0. 导入
// 1. 创建服务器

// 1.1 配置静态资源
server.use("/static", express.static("./client/"));

// 2. 给服务器配置监听端口号
  1. 配置服务器接口
// 0. 下载: npm install express
// 0. 导入
// 1. 创建服务器
// 1.1 配置静态资源

// 1.2 配置服务器接口
server.get("/goods/list", (req, res) => {
    /**
     *  req(request): 本次请求的相关信息
     *  res(response): 本次响应的相关信息
     *
     *  req.query: 对 GET 请求体请求参数的解析
     *      如果有参数, req.query 就是 {a:xxx, b:yyy}
     *      如果没有参数, req.query 就是 {}
     */
    console.log(req.query);
    // res.end(JSON.stringify({code: 1, msg: '成功'}))
    res.send({ code: 1, msg: "成功" });
});

server.post("/users/login", (req, res) => {
    console.log(req.query);
    // 注意! express 不会自动解析 post 请求的 请求体
    res.send({
        code: 1,
        msg: "接收 POST 请求成功, 但是还没有解析请求体, 参数暂时不能带回",
    });
});

// 2. 给服务器配置监听端口号