scripts脚本与元数据配置
scripts字段是项目自动化任务的核心,元数据字段则描述项目的基本信息。
scripts脚本配置
定义脚本
JSON
{
"scripts": {
"dev": "node server.js",
"build": "webpack --mode production",
"lint": "eslint src/"
}
}
执行脚本
Bash
# 自定义脚本需加run
npm run dev
npm run build
# 以下内置脚本可省略run
npm start
npm test
npm stop
npm restart
脚本间的钩子
NPM提供pre和post钩子,按顺序自动执行:
JSON
{
"scripts": {
"prebuild": "npm run lint",
"build": "webpack --mode production",
"postbuild": "echo 'build done'"
}
}
执行npm run build时依次运行:prebuild → build → postbuild。
钩子脚本没有输出提示,容易忽略其执行。调试时注意观察pre/post脚本是否正常。
其他元数据字段
description与keywords
JSON
{
"description": "一个轻量级HTTP工具库",
"keywords": ["http", "request", "tool"]
}
用于npm搜索时的匹配和展示。
main字段
指定包的入口文件:
JSON
{
"main": "lib/index.js"
}
当其他项目require('my-package')时,加载的就是main指向的文件。
license字段
声明开源协议:
JSON
{
"license": "MIT"
}
常用协议:MIT(最宽松)、Apache-2.0、GPL-3.0。
repository与author
JSON
{
"author": "小智 <dev@example.com>",
"repository": {
"type": "git",
"url": "https://github.com/user/repo.git"
}
}
未设置license时NPM默认视为专有软件,可能影响他人使用。开源项目务必明确声明协议。
要点总结
- scripts中自定义脚本用
npm run <name>执行,start/test/stop/restart可省略run - pre/post钩子可自动串联执行,但需注意其副作用
- main指定包入口文件,description和keywords影响npm搜索展示
- license务必显式声明,MIT是最常用的宽松协议