Day 5|npm 生态 & 项目工程化基础

第一部分:npm 本质理解

什么是 npm?

npm 是:

Node Package Manager

它是:

  • 一个包管理工具

  • 一个全球最大的 JavaScript 包仓库

  • 一个依赖版本管理系统

官方网站属于:

npm, Inc.

现在归属于:

GitHub


第二部分:初始化一个工程

bash 复制代码
mkdir day5-demo
cd day5-demo
npm init -y

生成:

bash 复制代码
Wrote to 自己本地的路径\day5-demo\package.json:

{
  "name": "day5-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

详细解释

1 mkdir day5-demo

mkdir = make directory(创建文件夹)

意思是:创建一个名为 day5-demo 的文件夹

📌 本质:

为一个"独立项目"准备一个单独空间。


2 cd day5-demo

cd = change directory(切换目录)

意思是:进入 day5-demo 这个文件夹

📌 本质:

后续所有操作都在这个项目目录里进行。

如果不 cd,npm 会在外层目录初始化项目。


3 npm init -y

这是重点。

npm init 是什么?

它会:

创建一个 package.json 文件

这是 Node 项目的"身份证"。

-y 是什么?

-y = yes

意思是:自动使用默认配置生成 package.json

如果不写 -y:

bash 复制代码
npm init

它会让你手动输入:

  • name

  • version

  • description

  • entry file

  • license

  • 等等

写 -y 就是:

👉 全部默认,直接生成。


4 逐字段解析你生成的内容

bash 复制代码
{
  "name": "day5-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

1️⃣ name

项目名称。

bash 复制代码
"name": "day5-demo"

⚠️ 发布到 npm 时必须唯一(全网唯一)。

2️⃣ version

bash 复制代码
"version": "1.0.0"

语义化版本号:

bash 复制代码
主版本.次版本.修订版本
major.minor.patch

例如:

  • 1.0.0 → 正式版

  • 1.0.1 → 修复 bug

  • 1.1.0 → 新增功能

  • 2.0.0 → 重大升级

3️⃣ main

bash 复制代码
"main": "index.js"

入口文件。

意思是:

bash 复制代码
require('day5-demo')

默认会加载:index.js(类似 .NET 项目的 Program.cs)

4️⃣ scripts

bash 复制代码
"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
}

这里是:

👉 项目命令入口

比如以后你可以写:

bash 复制代码
"scripts": {
  "start": "node index.js"
}

然后运行:

bash 复制代码
npm run start

这就是工程化的第一步。

5️⃣ license

bash 复制代码
"license": "ISC"

开源协议。

常见的:

  • MIT

  • ISC

  • Apache

  • GPL

个人项目一般 MIT 或 ISC。


第三部分:安装依赖

安装一个包试试:

bash 复制代码
npm install lodash

你会看到:

  • 生成 node_modules

  • 生成 package-lock.json

  • package.json 里出现 dependencies


lodash 是什么?

Lodash

一个常用工具库。


第四部分:版本号机制(非常重要)

假设:

bash 复制代码
"lodash": "^4.17.21"

规则:

符号 含义
^ 锁定大版本
~ 锁定小版本
无符号 精确版本

例子:^4.17.21 允许升级到:4.x.x 但不能升级到:5.0.0


第五部分:小作业

在 package.json 中添加:

javascript 复制代码
"scripts": {
  "start": "node index.js"
}

安装包 axios

bash 复制代码
npm install axios

创建index.js

javascript 复制代码
​
const axios = require('axios')

axios.get('https://api.github.com')
  .then(res => {
    console.log(res.status)
  })

​

安装成功后

bash 复制代码
npm run start

即可得到

bash 复制代码
> day5-demo@1.0.0 start
> node index.js

200

说明:

✅ axios 请求成功

✅ GitHub API 返回状态码 200

✅ 你的 Node 项目依赖机制工作正常


第六部分:需要额外清楚的几个问题


1️⃣ npm 和 Node 的关系?

🔹 Node 是什么?

Node.js

它是:

JavaScript 运行时环境

作用:

  • 执行 JS

  • 提供文件系统

  • 提供网络能力

  • 提供模块机制


🔹 npm 是什么?

npm

它是:

Node 的包管理工具

作用:

  • 下载第三方库

  • 管理依赖版本

  • 管理项目配置

  • 运行 scripts


✅ 关系总结

项目 角色
Node 引擎(运行 JS)
npm 仓库管理员(管理依赖)

类比:

.NET 世界 Node 世界
dotnet runtime Node
NuGet npm

2️⃣ node_modules 为什么不能提交到 Git?

🔹 ① 体积巨大

因为:

  • 每个包

  • 依赖别的包

  • 再依赖别的包

形成依赖树。


🔹 ② 可以重新生成

只要有package.json package-lock.json

执行

bash 复制代码
npm install

就能重新生成 node_modules。


🔹 ③ 不可读

node_modules 不是你写的代码。

提交它:

  • 增加 Git 仓库体积

  • 影响 clone 速度

  • 制造冲突


🔹 ④ 团队协作原则


3️⃣ package-lock.json 的作用?

这是 依赖锁文件

它解决一个核心问题:

同样的 package.json,在不同时间安装版本可能不同。


举例

package.json:

javascript 复制代码
"axios": "^1.6.0"

^ 允许升级小版本。

今天:1.6.2 明天:1.6.5

版本可能变。


package-lock.json 的作用

它会记录:

  • 精确版本

  • 依赖树

  • 每个子依赖的版本

保证:

所有人安装结果 100% 一样

团队工程必备必须提交


4️⃣ dependencies 和 devDependencies 区别?

🔹 dependencies

生产环境需要的依赖。

例如:

  • axios

  • express

  • mysql

安装方式

bash 复制代码
npm install axios

🔹 devDependencies

开发环境用的工具。

例如:

  • eslint

  • prettier

  • typescript

  • nodemon

安装方式

bash 复制代码
npm install nodemon --save-dev

🔥 核心区别

类型 生产环境会安装? 用途
dependencies ✅ 会 运行代码
devDependencies ❌ 不一定 辅助开发

5️⃣ 为什么团队必须锁版本?

这是最重要的问题。


🚨 如果不锁版本

可能出现:

  • 你电脑正常

  • 同事电脑报错

  • 线上服务器崩溃

因为:依赖偷偷升级了


所以必须:

✔ 提交 package-lock.json

✔ CI 使用锁文件安装

✔ 禁止随意升级


相关推荐
成为你的宁宁10 小时前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven
折七17 小时前
NestJS 用了两年,我换了这个
typescript·node.js·nestjs
Mr_li17 小时前
Nestjs 中 Provider 的注入方式扫盲,解决你的选择困难症
node.js
Mr_li17 小时前
一文吃透 Nestjs 动态模块之 register、forRoot、forFeature
node.js
Mr_li19 小时前
一文讲清 NestJS 中 IoC、DI、AOP、DTO、Entity 等名词
node.js
Mr_li19 小时前
一次讲透 NestJS 里“绑定”(全局 vs 局部)
node.js
Mr_li21 小时前
构建一个 NestJS 应用程序需要具备哪些基础元素?
node.js
UIUV1 天前
AI Agent 开发实战:从原理到最小化实现
后端·langchain·node.js
2301_816997881 天前
Webpack基础
前端·webpack·node.js