文心思匠

前端 package.json的使用, npm的生命周期

package.json本身没有生命周期,它是一个描述项目元信息和依赖关系的配置文件,但它参与了npm包的生命周期,即从包创建、发布、安装、运行到卸载的整个过程,通过定义scripts(如preinstall, install, postinstall, prepublish, publish, preuninstall, uninstall, postuninstall等),允许开发者在这些特定时刻执行自定义命令。

npm 包生命周期主要阶段

  1. 创建/开发阶段:
    • prepack/pack: 打包前钩子.
    • pack: 打包命令执行.
    • prepublishOnly/prepublish: 发布前钩子,确保包准备好.
    • publish: 发布到注册中心.
  2. 安装/下载阶段:
    • preinstall: npm install执行前.
    • install: 安装命令执行(通常是构建或链接).
    • postinstall: npm install完成或包安装后执行.
    • preshrinkwrap/shrinkwrap: 生成npm-shrinkwrap.json.
    • postshrinkwrap: npm-shrinkwrap.json生成后.
  3. 执行/运行阶段:
    • pretest/test/posttest: 测试脚本.
    • prestop/stop/poststop: 停止脚本.
    • prestart/start/poststart: 启动脚本.
  4. 卸载/移除阶段:
    • preuninstall: 卸载前.
    • uninstall: 卸载脚本.
    • postuninstall: 卸载后,清理工作.

总结

  • package.json是**npm(或yarn, pnpm)**管理包生命周期的基础文件.
  • 它通过scripts字段定义了钩子函数,让开发者能在包的安装、发布、运行、卸载等关键节点注入逻辑.
  • 这使得自动化构建、测试、部署流程变得高效和可控.
  •  

用途

  • 本地化构建:编译前端资源(如 SASS 编译成 CSS)。
  • 数据库迁移:在开发环境进行数据初始化。
  • 生成文件:创建配置文件、启动脚本。
  • 权限设置:赋予特定文件执行权限。
  • 示例

json

"scripts": {  "postinstall": "cp node_modules/d3/dist/d3.min.js app/public/js/d3.min.js || true"}

  • 脚本会在安装完所有 node_modules 后运行 cp 文件。