任何一个项目的构建离不开工具和统一的管理标准,在项目开发和维护过程中,我们需要了解安装包的相应工具和配置文件,以此来有效的进行项目的迭代和版本的更新,为项目提供基本的运行环境。
包管理工具顾名思义就是统一管理这些轮子的软件或者工具,它以多种方式自动处理项目依赖关系、提供了命令行工具(CLI)、支持跟踪依赖项和版本等功能,除此之外还可以安装、卸载、更新和升级包,配置项目设置,运行脚本等等。
简单的说: 包就像一个大仓库,仓库里雇佣了很多机器人,你只需要往仓库里丢东西即可,仓库里的机器人会自动给我们进行依赖包分类,如果需要一些个性化的服务,那么我们进行配置一下就可以了,就可以按我所配置的方式进行工作。
常用的高级语言基本都有自己的包管理工具
我们可以回想 Jquery 时代, 前端在开发项目是什么样的?
JS功能:
UI 功能:
.......
放到如今现在,各个框架满天飞的时代,那得累死你。
这时,前端的包管理工具出现了,解决了此类问题。
作为各种包管理工具中最早出现的开拓者,Npm 是 Node.js 官方提供的,他的出现同时也制定了一些列的包管理规范。
主流的前端包管理工具有 npm、yarn、pnpm、以及国内的镜像 cnpm、tyarn 等,这是包管理器都是基于 nodejs。
<!---->
<!---->
npm 是 Node Package Manager 的简称,顾名思义,它是 node 的包管理工具,也是目前世界上最大的开源库生态系统。
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
安装 Node 的同时,会自动安装 npm, 不需要手动安装npm 了。
$ npm -v
npm install -g cnpm --registry=https://registry.npm.taobao.org
npm init -y
-y 直接生成默认的package.json 文件,不需要自定义设置
npm install <package_name>
npm install -g <package_name>
安装到全局并不会体现到package.json 里面
npm install <package_name> --save | -S
安装到当前项目,并将包信息写入到dependencies
npm install <package_name> --save-dev | -D
安装到当前项目 并写入到devDependencies
devDependencies 是本地开发时用的依赖项
dependencies 是生产环境的依赖项
$ npm uninstall express
卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:
$ npm ls
$ npm update express
$ npm search express
1、局部安装
npm install <package_name>
说明 安装到当前项目
npm 5x 以后 这个命令等同于npm install --save <package_name> 同时也是会同样写入到依赖 dependencies
2、 全局安装 -g
npm install -g <package_name>
安装到全局并不会体现到package.json 里面
3、安装到生产依赖 --save
npm install <package_name> --save | -S
安装到当前项目,并将包信息写入到dependencies
4、安装到开发依赖 --save-dev
npm install <package_name> --save-dev | -D
安装到当前项目 并写入到devDependencies
devDependencies与dependencies 的区别:
devDependencies 是本地开发时用的依赖项
dependencies 是生产环境的依赖项
<!---->
npm install module-name -save 自动把模块和版本号添加到dependencies部分
npm install module-name -save-dev 自动把模块和版本号添加到devdependencies部分
npm install
会将package.json 里面的devDependencies和dependencies下的所有包都会下载到项目的node_modules文件夹下(没有的改文件夹会新建一个)
npm install --production
npm list -g
npm list grunt
$ npm uninstall 包名
查看卸载的包是否存在
npm ls
npm update 包名
npm search 包名
在自己发布 插件时,需要填写 package.json 的 version,下面我就来了解一下 版本号的一些知识点,如何正确写 版本号。
NPM使用语义版本号来管理代码。
语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。
💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥
注意
在 nodejs 版本管理中,还允许使用 ~ ^ * 字符来管理版本的范围:
直接使用npm 下载包是很慢的,有时会下载失败,因为npm 官方镜像在国外,国内访问比较慢。 这里我们可以使用 淘宝的镜像来下载,速度会快很多。
npm 镜像 切换 淘宝镜像源
npm config set registry https://registry.npm.taobao.org
npm 镜像 切换到 官方镜像源
npm config set registry https://registry.npmjs.org
yarn 是由 Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,yarn 是为了弥补 npm 的一些缺陷而出现的。
(yarn是 同步下载所有依赖,npm是按照队列下载依赖,只会等当前依赖下载完,才会进行下载另一个依赖。)
(yarn : yarn add/remove npm:npm install/uninstall)
(yarn 下载依赖时,输出的信息很少,只会输出必要的信息。 npm 信息比较冗长。)
(yarn会有一个缓存目录,会缓存以前安装过的软件包,再次安装时就不必从网络下载了,大大加速安装速度)
(下载软件时会自动优化请求顺序,使安装效率更高。)
(yarn在某个安装包请求失败时不会导致安装失败,它会自动去尝试重新安装。而npm则会毫不犹豫的失败,导致得再来一次,耗费时间)
npm | yarn |
---|---|
npm install | yarn |
npm install xxx@1.1.1 -g | yarn global add xxx@1.1.1 |
npm install xxx@1.1.1 --save | yarn add xxx@1.1.1 |
npm install xxx@1.1.1 --save-dev | yarn add xxx@1.1.1 --dev |
npm uninstall xxx --save(-dev) | yarn remove xxx |
npm run xxx | yarn run xxxx |
npm i -g yarn
<!---->
命令 | 释义 |
---|---|
yarn add | 添加依赖 |
yarn audit | 对已安装的软件包执行漏洞审核 |
yarn autoclean | 从程序包依赖项中清除并删除不必要的文件 |
yarn bin | 显示依赖bin文件夹的位置 |
yarn cache | 管理用户目录中的依赖缓存 |
yarn check | 验证当前项目中程序包依赖项 |
yarn config | 管理依赖配置文件 |
yarn create | 创建Yarn工程 |
yarn dedupe | 删除重复的依赖 |
yarn generate-lock-entry | 生成Yarn锁文件 |
yarn global | 在全局安装依赖 |
yarn help | 显示Yarn的帮助信息 |
yarn import | 迁移当前依赖的项目package-lock.json |
yarn info | 显示有关依赖的信息 |
yarn init | 初始化工程并创建package.json文件 |
yarn install | 用于安装项目的所有依赖项 |
yarn licenses | 列出已安装依赖的许可证及源码url |
yarn link | 链接依赖文件夹 |
yarn list | 列出已安装的依赖 |
yarn login | 存储您在 registry 上的用户名和 email |
yarn logout | 清除你在 registry 上用户名和 email |
yarn outdated | 列出所有依赖项的版本信息 |
yarn owner | 展示依赖作者 |
yarn pack | 创建依赖项的压缩gzip |
yarn policies | 规定整个项目中执行Yarn的版本 |
yarn publish | 将依赖发布到npm注册表 |
yarn remove | 删除依赖 |
yarn run | 运行定义的程序脚本命令 |
yarn tag | 在依赖上添加,删除或列出标签 |
yarn team | 管理组织中的团队,并更改团队成员身份 |
yarn test | 运行程序的test命令 |
yarn upgrade | 将指定依赖升级为最新版本 |
yarn upgrade-interactive | 更新过期依赖的简便方法 |
yarn version | 展示依赖版本信息 |
yarn versions | 展示所有依赖项版本信息 |
yarn why | 显示有关为什么安装依赖的信息 |
yarn workspace | Yarn的工作区信息 |
yarn workspaces | Yarn的所有工作区信息 |
package.json 文件其实就是对项目或者模块包的描述,里面包含许多元信息。比如项目名称,项目版本,项目执行入口文件,项目贡献者等等。npm install 命令会根据这个文件下载所有依赖模块。
{
"name": "",
"version": "0.1.0",
"private": true,
"scripts": {
"start": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"package": "vue-cli-service build --target lib ./src/package/index.js --name pro-form --dest ProForm"
},
"dependencies": {
"@codemirror/lang-html": "^6.1.2",
"@codemirror/lang-javascript": "^6.1.0",
"@codemirror/lang-json": "^6.0.0",
"@codemirror/theme-one-dark": "^6.1.0",
"axios": "^1.1.2",
"codemirror": "^6.0.1",
"core-js": "^3.6.5",
"element-ui": "^2.15.10",
"vue": "^2.6.11",
"vue-codemirror": "^6.1.1",
"vue-json-viewer": "^2.2.22",
"vue-router": "^3.2.0",
"vuedraggable": "^2.24.3",
"vuex": "^3.4.0",
"x-pro-form": "^1.0.5"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.13",
"@vue/cli-plugin-eslint": "~4.5.13",
"@vue/cli-plugin-router": "~4.5.13",
"@vue/cli-plugin-vuex": "~4.5.13",
"@vue/cli-service": "^4.5.19",
"@vue/eslint-config-prettier": "^6.0.0",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-vue": "^6.2.2",
"less": "^3.0.4",
"less-loader": "^5.0.0",
"prettier": "^2.2.1",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended",
"@vue/prettier"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
package.json 文件创建有两种方式,手动创建或者自动创建。
name:项目/模块名称,长度必须小于等于214个字符,不能以"."(点)或者"_"(下划线)开头,不能包含大写字母。
version:项目版本。
author:项目开发者,它的值是你在https://npmjs.org网站的有效账户名,遵循“账户名<邮件>”的规则,例如:zhangsan zhangsan@163.com。
description:项目描述,是一个字符串。它可以帮助人们在使用npm search时找到这个包。
keywords:项目关键字,是一个字符串数组。它可以帮助人们在使用npm search时找到这个包。
private:是否私有,设置为 true 时,npm 拒绝发布。
license:软件授权条款,让用户知道他们的使用权利和限制。
bugs:bug 提交地址。
contributors:项目贡献者 。
repository:项目仓库地址。
homepage:项目包的官网 URL。
dependencies:生产环境下,项目运行所需依赖。
devDependencies:开发环境下,项目所需依赖。
scripts:执行 npm 脚本命令简写,比如 “start”: “react-scripts start”, 执行 npm
start 就是运行 “react-scripts start”。
bin:内部命令对应的可执行文件的路径。
main:项目默认执行文件,比如 require(‘webpack’);就会默认加载 lib 目录下的 webpack.js
文件,如果没有设置,则默认加载项目跟目录下的 index.js 文件。
module:是以 ES Module(也就是 ES6)模块化方式进行加载,因为早期没有 ES6 模块化方案时,都是遵循CommonJS 规范,而 CommonJS 规范的包是以 main 的方式表示入口文件的,为了区分就新增了 module 方式,但是 ES6 模块化方案效率更高,所以会优先查看是否有 module 字段,没有才使用 main 字段。
eslintConfig:EsLint 检查文件配置,自动读取验证。
engines:项目运行的平台。
browserslist:供浏览器使用的版本列表。
style:供浏览器使用时,样式文件所在的位置;样式文件打包工具parcelify,通过它知道样式文件的打包位置。
files:被项目包含的文件名数组。
该文件是由一系列键值对构成的 JSON 对象,每一个键值对都有其相应的作用.
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"dev": "cross-env NODE_ENV=dev nodemon ./bin/www.js",
"prd": "cross-env NODE_ENV=production nodemon ./bin/www.js"
}
cross-env:设置环境变量插件
npm run dev
npm run后面跟script中设置的变量名;执行后面的脚本
npm run是npm run-script的简写,顾名思义就是执行脚本。执行的脚本配置在package.json中的scripts对象。
#生成 package.json 文件(需要手动选择配置)
npm init
#生成 package.json 文件(使用默认配置)
npm init -y
#一键安装 package.json 下的依赖包
npm i
#在项目中安装包名为 xxx 的依赖包(配置在 dependencies 下)
npm i xxx
#在项目中安装包名为 xxx 的依赖包(配置在 dependencies 下)
npm i xxx --save
#在项目中安装包名为 xxx 的依赖包(配置在 devDependencies 下)
npm i xxx --save-dev
#全局安装包名为 xxx 的依赖包
npm i -g xxx
#运行 package.json 中 scripts 下的命令
npm run xxx
# 将当前模块发布到 npmjs.com,需要先登录 插件发布到npm 仓库
npm publish
# 生成 package.json 文件(需要手动选择配置)
yarn init
# 生成 package.json 文件(使用默认配置)
yarn init -y
# 一键安装 package.json 下的依赖包
yarn
# 在项目中安装包名为 xxx 的依赖包(配置在 dependencies 下),同时 yarn.lock 也会被更新
yarn add xxx
# 在项目中安装包名为 xxx 的依赖包(配置在配置在 devDependencies 下),同时 yarn.lock 也会被更新
yarn add xxx --dev
# 全局安装包名为 xxx 的依
yarn global add xxx
# 运行 package.json 中 scripts 下的命令
yarn xxx
# 列出 xxx 包的版本信息
yarn outdated xxx
# 验证当前项目 package.json 里的依赖版本和 yarn 的 lock 文件是否匹配
yarn check
# 将当前模块发布到 npmjs.com,需要先登录
yarn publish
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。