关于node.js和npm的安装请参见我的文章。
Node.js作为JavaScript运行时环境,采用V8引擎和事件驱动架构,实现了单线程高并发的异步I/O模型。其生态核心npm(Node Package Manager)拥有超过200万模块,日均下载量超30亿次,已成为现代全栈开发的基石15。
版本选择策略:
如何安装node.js和npm,请参见我写的高收藏文章。
npm init -y # 快速生成默认package.json
生成文件示例:
{
"name": "my-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": { ... },
"dependencies": {},
"devDependencies": {}
}
命令格式 | 功能说明 | 适用场景 |
---|---|---|
npm i [email protected] |
安装指定主版本 | 需要锁定大版本 |
npm i axios --omit=optional |
忽略可选依赖 | 精简生产环境 |
npm i -D vite@latest |
安装最新开发依赖 | 前沿技术尝鲜 |
版本锁定机制:
package-lock.json
记录精确依赖树,需提交至版本控制系统16
"scripts": {
"prebuild": "rimraf dist",
"build": "vite build",
"postbuild": "npm run analyze",
"analyze": "source-map-explorer dist/*.js"
}
执行流程:npm run build
将自动触发prebuild→build→postbuild链式执行1
使用shx
模块解决Windows/Linux环境差异:
npm i -D shx
"scripts": {
"clean": "shx rm -rf dist"
}
# .env.production
API_BASE=https://api.example.com
# package.json
"scripts": {
"start": "dotenv -e .env.${NODE_ENV} node app.js"
}
通过cross-env
实现跨平台环境变量设置6
"optionalDependencies": {
"cpu-features": "^0.6.0"
}
使用process.arch
判断架构安装特定模块5
npm config set registry http://nexus.internal.com/repository/npm-group/
npm config set //nexus.internal.com/repository/npm-private/:_authToken=${NPM_TOKEN}
支持混合源配置(公共模块代理+私有模块直连)9
npm audit --production
npx npm-outdated --level=high
"dependencies": {
"express": "~4.18.2" # 仅接受补丁更新
}
推荐工具:npm-check-updates
批量更新次要版本6
优化方向 | 实施方法 | 效果评估 |
---|---|---|
安装速度 | npm ci --prefer-offline |
减少30%安装时间 |
构建缓存 | npm config set cache ~/.custom-cache |
复用CI/CD缓存 |
依赖树扁平化 | npm dedupe |
减少40%node_modules体积 |
现象:ERESOLVE unable to resolve dependency tree
处理步骤:
npm ls
npm i --force
npm shrinkwrap
诊断命令:
node -e "console.log(require.resolve('lodash'))" # 验证模块路径
npm explain lodash # 查看依赖引入路径
Dockerfile优化示例:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm \
npm ci --production
COPY . .
CMD ["npm", "start"]
优势:利用构建缓存层减少镜像体积6
@napi-rs/cli
实现原生模块跨平台编译本文截图来源:CSDN技术博客34、知乎专栏5、搜狐技术社区6