包和依赖
没有人会从零开始写一整个应用。那些又难又常见的问题——格式化日期、处理支付、渲染一个日历——别人早就解决好并打包好了。一个**包(package)就是一块可复用的代码,你把它拉进自己的项目,而不用自己去写。你项目的依赖(dependencies)**就是它所依赖的那一串包的清单。
在 JavaScript 的世界里,管这件事的工具是 npm(Node Package Manager,Node 包管理器)。有两个文件负责记账:
package.json—— 人类可读的清单,列出你的项目需要什么,外加运行它的命令。这个文件是由你(或者 AI)来编辑的。- 锁文件 lockfile(
package-lock.json或类似的文件)—— 一份精确的、由机器生成的记录,记下每一个包及其确切的版本,好让这个应用在你的机器、队友的机器、以及服务器上都构建得一模一样。这个文件你不用手动去改;交给工具去管理就好。
{
"name": "my-app",
"scripts": {
"dev": "next dev",
"build": "next build"
},
"dependencies": {
"next": "16.0.0",
"react": "19.0.0"
}
}
为什么要在意这些?当 AI 说 "我们加一个库来做这个吧" 时,它就是在编辑 package.json,而你正在信任别人的代码——更少、更知名的依赖,比一堆来路不明的依赖要安全。还有,当一次构建莫名其妙地坏掉时,依赖版本对不上是常见的嫌疑犯,而 "删掉再重新安装这些包" 是一个实实在在、很常用的修法。