返回

Node.js(笔记08) - 包管理配置文件(package.json)

发布时间:2022-12-31 02:19:30 353
# javascript# node.js# 数据# 服务器# 工具

包管理配置文件

npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件,用来记录与项目有关的一些配置信息。例如:

1)项目的名称、版本号、描述等;

2)项目中都用到了哪些包;

3)哪些包只在开发期间会用到;

4)哪些包在开发和部署时都需要用到;

 

多人协作的问题

整个项目的体积是:30MB,第三方包就占了:28MB,项目源代码体积:2MB;

遇到的问题:第三方包的体积过大,不方便团队成员共享项目源代码;

解决方案:共享时剔除 node_modules 

 

如何记录项目中安装了哪些包

在项目根目录中,创建一个 package.json 的配置文件,即可用来记录项目中安装了哪些包,从而方便剔除 node_modules 目录之后,在团队成员之间共享项目源代码。

注意:开发中,要把 node_modules 文件夹添加到 .gitignore 忽略文件中,不要上传到 github 中。 

快速创建 package.json

npm 包管理工具提供一个快捷命令: ​npm init -y ​,可以在执行命令时所处的目录中,创建 package.json 这个包管理配置文件:

> npm init -y

注意:

1)上述命令,只能在英文的目录下成功运行!所以,在项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。

2)运行 npm install 命令安装包的时候,npm 包管理工具会自动把 包的名称和版本号,记录到 package.json 中。

执行完后:

{
"dependencies": {
"moment": "^2.29.4"
},
"scripts": {
"start": "node server.js"
},
"name": "nodejs",
"version": "1.0.0",
"main": "clock.js",
"keywords": [],
"author": "",
"license": "ISC",
"description": ""
}

 

dependencies 节点

package.json 文件中,有一个 dependencies 节点,专门用来记录使用 npm install 命令安装了哪些包。初始化的时候是没有这个节点的,当安装了包后,就有了;

比如:一次安装几个包;

> npm install jquery art-template

一次安装了两个包,

Node.js(笔记08) - 包管理配置文件(package.json)_包管理工具

提示添加了34 个包,因为还依赖了其他的包;

此时,再看下  package.json 文件

{
"dependencies": {
"art-template": "^4.13.2",
"jquery": "^3.6.3",
"moment": "^2.29.4"
},
"scripts": {
"start": "node server.js"
},
"name": "nodejs",
"version": "1.0.0",
"main": "clock.js",
"keywords": [],
"author": "",
"license": "ISC",
"description": ""
}

提示:dependencies 节点中多了 jquery 和 art-template 两条版本记录;

 

一次性安装所有包

当拿到一个剔除了 node_modules 的项目之后,需要先把所有的包下载到项目中,才能将项目运行起来,否则会报类似下面的错误:

Node.js(笔记08) - 包管理配置文件(package.json)_node.js_02

比如:执行demo.js

const moment = require('moment')
const dt = moment().format('YYYY-MM-DD')
console.log(dt); // 2022-12-24

当前 node_modules 中有 moment 这个包,所以执行很顺利,删除整个 node_modules 后再执行:

就报一堆错误:

Error: Cannot find module 'moment'

node_modules 目录删除了,但 package.json 还在。只需要执行命令

> npm install

就可以一次性安装所有的依赖包;

提示:执行 npm install 命令时,npm 包管理工具会先读取 package.json 中的 dependencies 节点,读取到记录的所有依赖包名称和版本号之后,npm 包管理工具会把这些包一次性下载到项目中。 

Node.js(笔记08) - 包管理配置文件(package.json)_node.js_03

再执行 node demo.js 文件:

Node.js(笔记08) - 包管理配置文件(package.json)_node.js_04

结果就正常了。

 

卸载包

运行 npm unstall 命令,来卸载指定的包: 

> npm uninstall moment

提示:安装包能简写成  npm install => npm i ,卸载包不能简写;

注意:npm uninstall 命令执行成功后,会把卸载的包从 package.json 的 dependencies 中移除。

Node.js(笔记08) - 包管理配置文件(package.json)_node.js_05

dependencies 节点中也把 moment 的信息去掉了;

"dependencies": {
"art-template": "^4.13.2",
"jquery": "^3.6.3"
}

项目还要使用 moment ,再安装回来就行;

> npm install moment

dependencies 节点中就又多了一个 moment ;

"dependencies": {
"art-template": "^4.13.2",
"jquery": "^3.6.3",
"moment": "^2.29.4"
}

 

devDependencies 节点

如果某些包只在项目开发阶段会用到,在项目上线后用不到了,则建议把这些包记录到 devDependencies 节点中。与之对应的,某些包在开发和项目上线后都需要用到,则建议把这些包记录到 dependencies 节点中。这两个节点,也只有这一点的区别。

使用如下命令,将包记录到 devDependencies 节点中:

> npm install [包名] --save-dev

或简写:

> npm i [包名] -D

 提示:包名(moment)和参数(--save-dev) 的位置可以互换,语法比较随意;

示例:

> npm i webpack -D

Node.js(笔记08) - 包管理配置文件(package.json)_node.js_06

同时,package.json 包中的 devDependencies 节点中就多了一项记录;

"devDependencies": {
"webpack": "^5.75.0"
}

 

为什么下包速度慢

如果使用 npm 默认的包注册中心地址下载,就会比较慢。毕竟是在国外,经过海底光纤,不远万里...

国内淘宝 npm 镜像服务器也提供了完整同步的 npm 包,极大提高了下包速度。

Node.js(笔记08) - 包管理配置文件(package.json)_包管理工具_07

镜像(Mirroring):是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本。

 

切换 npm 下包镜像源

查看当前下包镜像源:

> npm config get registry

Node.js(笔记08) - 包管理配置文件(package.json)_包管理工具_08

返回: http://registry.npmmirror.com/ ,我这已经改成淘宝镜像了。

官方源地址: https://registry.npmjs.org/

设置新的镜像源:

> npm config set registry http://registry.npmmirror.com

或,加个"="也行。

> npm config set registry=http://registry.npmmirror.com

 

nrm 切换镜像源工具

为了更方便切换下包的镜像源,我们可以安装 nrm 小工具,利用 nrm 提供的终端命令,可以快速查看和切换下包的镜像源;

安装:

> npm i nrm -g

全局安装参数: -g

查看当前所有可用的镜像源地址:

> nrm ls

Node.js(笔记08) - 包管理配置文件(package.json)_node.js_09

将下包的镜像源切换为 taobao 镜像:

> nrm use taobao

来回切换下看看:

Node.js(笔记08) - 包管理配置文件(package.json)_node.js_10

切换成 tencent 再切换回 taobao。

 

推荐阅读:

​​NPM 简介、安装、配置、常用方法​​

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线