介绍

  • npm(node package manage)node 包 管理器。管理node包的工具
  • npm这个工具,在安装 node 的时候,就已经安装到你的计算机中了
  • 命令行中执行: npm -v ,如果看到版本号,说明安装成功了
  • npm 是 管理(下载、卸载、发布….)第三方模块的工具

初始化

安装本地模块,需要使用npm工具初始化

  • 执行npm init
    • package name :输入包名
      • 注意事项
        • 默认使用当前文件夹的名 作为 包名
        • 包名不能使用中文,特殊字符(& _ …等)
        • 不能和需要安装的第三方模块同名
    • 然后一路回车
  • 执行npm init -y
    • -y 代表全部yes
    • 不需要修改任何条件时直接使用,马上初始化完毕
  • 初始化完毕后会生成一个 package.json 文件

    package.json 文件

  • dependencies 依赖(复数)

    • dependencies指定了当前项目所依赖(需要)的包,可以使用 **npm install** 可以安装所有的依赖
    • 使用 npm install 模块 安装模块时,会将该模块记录到 dependencies 中,表示这是项目必须的模块。
    • 使用 npm install 模块 -D 安装模块时,会将该模块记录到 devDependencies 中,它表示项目不需要这个模块,但是开发阶段需要这个模块(进行测试、打包等等)
  • scriptsscripts指定了运行脚本命令的 npm 命令行缩写,比如start指定了运行npm run start时,所要执行的命令。

    • 下面的代码中,a 表示 git init 命令。执行命令时,使用 npm run a ,相当于执行了 git init
    • 下面的代码中,start 表示 node app.js 命令,执行命令时,使用 npm start 即可,相当于执行了
      1. "scripts": {
      2. "a": "git init",
      3. "start": "node app.js",
      4. "t": "dir c:\\"
      5. }

      运行 scripts

  • npm run a

  • npm run start
  • npm start
  • 只有 start 可以简化调用

本地模块

安装

建议在安装第三方模块之前,先执行如下命令
下面的命令只需要执行一次即可(不管以后重启vscode还是重启电脑,都不需要执行第二次)
提升下载速度,复制命令,cmd窗口中右击粘贴
npm config set registry [https://registry.npm.taobao.org](https://registry.npm.taobao.org)

  • 执行npm install 包名
  • 执行npm i 包名
    • i 是 install 的简写
  • 执行npm i 包名 包名
    • 一次性下载多个
  • 执行npm i 模块@版本号
    • 下载指定版本
  • 安装项目依赖,老版本的node需要加 --save,作用是把下载的记录到开发依赖中
    • 如:npm i dayjs --save === npm i dayjs -s
  • 只在开发阶段使用,项目做完不需要webpack了,这样的包可以安装到开发依赖中,做区分

    • 如:npm i webpack --save-dev === npm i weboack -D

      卸载

  • 执行npm uninstall 包名

  • 执行npm un 包名
    • un 是 uninstall 的简写
  • 执行npm un 包名 包名

    • 一次性卸载多个

      说明

  • 下载安装的模块,存放在当前文件夹的 node_modules 文件夹中

  • 同时还会生成一个记录下载的文件 package-lock.json
    • 下载的包都会记录在这里,删除后也会删除记录信息
  • 使用时,会查找当前文件夹的node_modules,找不到会向上层文件夹查找,以此类推

    • 所以,只能在当前下载包的文件夹,及其后代文件夹使用

      使用

      演示 dayjs 模块 的使用

  • dayjs 和 moment 都是时间日期处理模块,功能相似

  • dayjs 体积更小 网站:https://dayjs.fenxianglu.cn/ ```javascript // 导入模块 const dayjs = require(‘dayjs’)

// 得到当前的时间 console.log(dayjs().format())

// 获取具体时间格式向format传入格式参数 console.log(dayjs().format(‘YYYY-MM-DD HH:mm:ss’)) // 年月日时分秒格式

// 把任意的一个时间改变成年月日时分秒格式 console.log(dayjs(188513465148).format(‘YYYY-MM-DD HH:mm:ss’)) // 向dayjs()传入一个时间戳 ```


全局模块

全局模块和本地模块的差异

  • 全局安装的模块,不能通过 require() 加载使用。
  • 全局安装的模块,一般都是命令或者工具。

    安装

  • 执行npm i 模块名 -g

  • 执行npm i -g 模块名
  • mac 系统如果安装不上,使用下面的命令提高权限

    • sudo npm i -g 模块名

      卸载

  • 执行npm un 模块名 -g

    使用

  • 执行 nrm ls —- 查看全部可用的镜像源

  • 执行 nrm use 镜像源

    • nrm use taobao —— 切换到淘宝镜像
    • nrm use npm —— 切换到npm主站

      报错解决

  • 运行 nrm ls 或者 nrm use taobao 等命令,如果报错如下:
    “无法加载文件 C:………………….,因为在此系统上禁止运行脚本。…………….”

  • 解决办法是:
    • 管理员方式,打开命令行(powershell)窗口
    • 执行 set-ExecutionPolicy RemoteSigned;
    • 在出现的选项中,输入 A,回车。即可。
  • 如果报错如下
    “无法将 nrm 识别为 cmdlet、函数、脚本文件或可运行程序的名称。xxxxxxxxxxx”
  • 解决办法,重启vscode,win7可能要重启电脑。

require运行机制

  1. 判断缓存中有没有,如果有,使用缓存中的内容
  2. 缓存中没有,那么表示第一次加载,加载完会缓存
  3. 判断模块名有没有带路径(./)
  4. 模块名中有路径,加载自定义模块(自己写的文件)const xx = require('./xx')
    1. 优先加载同名文件,加载一个叫做 xx 的文件
    2. 再次加载js文件,加载 xx.js 文件
    3. 再次加载json文件,加载 xx.json 文件
    4. 如果上述文件都没有,则报错 “Cannot find module ‘./xx’”
  5. 模块名没有路径优先加载核心模块如果没有核心模块,则加载第三方模块
  6. 加载第三方模块的查找方式
    1. 优先在当前文件夹的node_modules里面查找第三方模块
    2. 在当前文件夹的上级目录的node_modules里面查找第三方模块
    3. 继续向上层文件夹查找第三方模块
    4. 找到根目录还没有找到会报错

开发一个包

文件

📂 - puxinman-test
📃 - package.json (package.json包的配置文件)
📃 - index.js (入口文件)
📃 - README.md (说明文档)

规范

一个规范的包结构,需要符合以下 3 点要求:

  1. 包必须以单独的目录而存在
  2. 包的顶级目录下要必须包含 package.json 这个包管理配置文件
  3. package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口。
    • name 包的名字,我们使用 require()加载模块的时候,使用的就是这个名字
    • version 版本,1.2.18
    • main 入口文件。默认是index.js 。如果不是,需要使用main指定
    • description 搜索时的文字说明
    • 关于更多的约束,可以参考如下网址: https://yarnpkg.com/zh-Hans/docs/package-json

      发布包

  • 终端中,切换镜像源为npm(不能发布到淘宝,所以必须切换镜像源为npm主站)
  • nrm use npm
  • 终端中,登录 npm 账号
    • 执行 npm login 命令
    • 输入账号
    • 输入密码(输入的密码是看不见的,正常
    • 输入邮箱
  • 发布

    • 注意,执行命令的文件夹,必须是包的根目录
    • 运行 npm publish 命令,即可将包发布到 npm 上

      更新包

  • 修改版本号,比如原来的版本号是 1.0.0 ,则需要修改的比原来的版本号大一点,比如改为 1.0.1 或者 1.3.5等等

  • 重新执行 npm publish 即可将代码更新到 npm网站。