• package.json 详解


    当我们创建一个 Node 项目时, 需要创建一个 package.json 文件,描述这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。

    你可以在命令行使用 npm help package.json 命令,将跳转到页面,查看这些字段如何使用。下面将根据该文档,进行整理。

    字段信息

    一般,开始一个项目时,我们会在命令行使用 npm init 命令生成 package.json 文件。

    以下是 package.json 的一些字段信息:

    name 项目名

    1. {
    2. "name": "node"
    3. }

    version 描述项目的当前版本号

    1. {
    2. "version": "0.1.0"
    3. }

    description 项目的描述

    1. {
    2. "description": "My package"
    3. }

    main 指定项目的主入口文件

    1. {
    2. "main": "index.js"
    3. }

    author 项目作者信息,贡献者。它可以有两种写法。emailurl 是可选的。

    1. // 方式一:
    2. {
    3. "name" : "lio-zero",
    4. "email" : "licroning@163.com",
    5. "url" : "https://www.jianshu.com/u/3f644e66afa3"
    6. }
    7. // 方式二:
    8. {
    9. "author": "lio-zero (https://www.jianshu.com/u/3f644e66afa3)"
    10. }

    keywords 使用相关关键字描述项目

    1. {
    2. "keywords": ["admin", "node", "node"]
    3. }

    license 许可证(告诉用户可以做什么和不能做什么,常见:MIT、BSD-3-Clause)

    1. {
    2. "keywords": "MIT"
    3. }

    scripts 指定运行脚本命令的 npm 命令行缩写,比如 start 指定了运行 npm run start 时,所要执行的命令。

    1. {
    2. "scripts": {
    3. "start": "node ./bin/xxx"
    4. }
    5. }

    repository 字段用于指定代码存放的位置。

    1. {
    2. "repository": {
    3. "type": "git",
    4. "url": "这里写上项目在 github 上的地址"
    5. }
    6. }

    您也可以添加 -y 标志来生成默认的 package.json 文件:

    1. {
    2. "name": "demo",
    3. "version": "1.0.0",
    4. "description": "",
    5. "main": "index.js",
    6. "scripts": {
    7. "test": "echo \"Error: no test specified\" && exit 1"
    8. },
    9. "keywords": [],
    10. "author": "",
    11. "license": "ISC"
    12. }

    使用 npm init -y 默认生成的 package.json 文件会少一个 repository 字段,需要的话可以手动添加上去。

    接下来我们将在这基础上介绍一些其他字段,他们都是可选的,也会在您使用某些 npm 命令时自动生成。

    依赖

    dependencies 字段指定了生产环境项目的依赖。当你添加生产环境依赖时,他会自动生成,如:npm i express

    1. {
    2. "dependencies": {
    3. "express": "^4.17.1"
    4. }
    5. }

    devDependencies 字段指定了开发环境项目的依赖。当你添加生产环境依赖时,他会自动生成,如:npm i eslint -D

    1. {
    2. "devDependencies": {
    3. "eslint": "^6.7.2"
    4. }
    5. }

    peerDependencies 兼容性依赖。如果你的包是插件,适合这种方式。

    1. {
    2. "peerDependencies": {
    3. "tea": "2.x"
    4. },
    5. }

    optionalDependencies 如果你想在某些依赖即使没有找到,或则安装失败的情况下,npm 都继续执行。那么这些依赖适合放在这里。

    1. {
    2. "optionalDependencies": {},
    3. }

    bundledDependencies 发布包时捆绑的包名数组

    1. {
    2. "bundledDependencies": ["renderized", "super-streams"]
    3. }

    配置

    config 字段中的键作为 env 环境变量公开给脚本。

    1. {
    2. "name": "node",
    3. "config": {
    4. "foo": "hello"
    5. }
    6. }

    你可以在应用程序中使用 config 字段,当用户执行 npm run start 命令时,这个脚本就可以得到值。

    console.log(process.env.npm_package_config_foo)
    

    你可以使用下面命令改变这个值。

    $ npm config set node:foo hi
    

    lint-staged

    在代码提交之前,进行代码规则检查能够确保进入 git 库的代码都是符合代码规则的。但是整个项目上运行 lint 速度会很慢,lint-staged 能够让 lint 只检测暂存区的文件,所以速度很快。

    安装与配置

    huskylint-staged

    $ npm i husky lint-staged -D
    

    package.json 中配置:

    1. {
    2. "husky": {
    3. "hooks": {
    4. "pre-commit": "lint-staged"
    5. }
    6. },
    7. "lint-staged": {
    8. "*.js": "eslint --fix"
    9. }
    10. }

    git commit 时触发 pre-commit 钩子,运行 lint-staged 命令,对 *.js 执行 eslint 命令。eslint 要提前配置好。

    其他

    homepage 项目首页的网址。

    1. {
    2. "homepage": "https://www.jianshu.com/u/3f644e66afa3"
    3. }

    bugs 项目的问题追踪系统的 URL 或邮箱地址,这些对遇到软件包问题的人很有帮助。

    1. {
    2. "bugs": {
    3. "url" :"http://github.com/owner/project/issues",
    4. "email" :"project@hostname.com"
    5. }
    6. }

    bin 很多的包都会有执行文件需要安装到 PATH 中去。这个字段对应的是一个 Map,每个元素对应一个{ 命令名:文件名 }。这些可执行文件的头部需要加上 #!/usr/bin/env node

    1. {
    2. "bin": {
    3. "npm": "./cli.js",
    4. "command": "./bin/command"
    5. }
    6. }

    private 是一个布尔值。如果 private 为 true,可以保证包不会被发布到 npm。这可以防止私有 repositories 不小心被发布出去。

    preferGlobal 是一个布尔值。如果你的包是个命令行应用程序,需要全局安装,就可以设为 true。

    1. {
    2. "private": true,
    3. "preferGlobal": true
    4. }

    browserslist 指定项目所支持的浏览器版本。

    1. {
    2. "browserslist": [
    3. "last 3 Chrome versions",
    4. "last 3 Firefox versions",
    5. "Safari >= 10",
    6. "Explorer >= 11",
    7. ]
    8. }

    engines 字段指明了该项目运行的平台,比如 Node 的某个版本或者浏览器,也可以指定适用的 npm 版本。

    1. {
    2. "engines": {
    3. "node": ">= 12.16.2",
    4. "npm": ">= 6.14.8"
    5. },
    6. }

    man 用来指定当前项目的 man 文档的位置。

    1. {
    2. "man" :[ "./doc/calc.1" ]
    3. }

    style 指定供浏览器使用时,样式文件所在的位置。样式文件打包工具 parcelify,通过它知道样式文件的打包位置。

    1. {
    2. "style": [
    3. "./node_modules/tipso/src/tipso.css"
    4. ]
    5. }

    cpu 指定 CPU 型号。

    1. {
    2. "cpu" : [ "x64", "ia32" ],
    3. "cpu" : [ "!arm","!mips" ]
    4. }

    os 指定项目可以在什么操作系统上运行。

    1. {
    2. "os" : [ "darwin","linux" ],
    3. }

    files 当你发布项目时,具体哪些文件会发布上去。如果需要把某些文件不包含在项目中,添加一个 .npmignore 文件。这个文件和 gitignore 类似。

    1. {
    2. "files": [
    3. "src",
    4. "dist/*.js",
    5. "types/*.d.ts"
    6. ],
    7. }

    publishConfig 是一个布尔值。如果你的包是个命令行应用程序,需要全局安装,就可以设为 true。

    engineStrick 是一个布尔值。如果你肯定你的程序只能在制定的 engine 上运行,设置为 true。

    还有一些特殊的字段,比如 prettierunpkgbabeljest 等,他们配合工具使用。

    根据 package.json 内容自动生成 README.md 文件

    对于任何开源项目来说,最重要的文档就是 README。

    这里介绍一个好用的工具 readme-md-generator,它将根据 package.json 文件内容自动生成漂亮 README文件

    readme-md-generator 能够读取您的环境(package.json,git 配置等),创建项目的 README 文件。

    以下是该模式提供的一个示例演示:

     

    使用示例

    基本配置

    确保已安装 npx(自 npm 以来默认 npx 5.2.0)

    只需在项目根部运行以下命令并回答问题:

    $ npx readme-md-generator
    

    或使用 -y 标志默认生成:

    $ npx readme-md-generator -y
    

    假设我们有如下配置:

    1. {
    2. "name": "vue3",
    3. "version": "0.1.0",
    4. "private": true,
    5. "description": "vue3-demo",
    6. "author": "lio-zero ",
    7. "license": "MIT",
    8. "engines": {
    9. "node": ">= 12.16.2",
    10. "npm": ">= 6.14.8"
    11. },
    12. "repository": {
    13. "type": "git",
    14. "url": "git+https://github.com/lio-zero/vue3.git"
    15. },
    16. "homepage": "https://github.com/lio-zero/vue3.git#readme",
    17. "keywords": [
    18. "vue3",
    19. "cli"
    20. ],
    21. "scripts": {},
    22. "dependencies": {},
    23. "devDependencies": {}
    24. }

    效果如下:

     

    生成 README.md

  • 相关阅读:
    Laravel 的事件监听器与服务提供者和服务容器的二三事
    halcon知识:矩阵专题【02】
    【Hive】语句执行顺序
    学习WiFi,怎么入手?
    海康Visionmaster-全局脚本:VM 加载方案后自动执行 的方法,如何让VM在方案加载后自动执行流程?
    【React学习】React高级特性
    实例分割算法综述
    .Net FramWork 和Net Core3.1配置Log4.net
    Boa服务器与Cgi简介
    指针--用指针变量作函数参数的实例(按值调用与模拟按引用调用)、函数指针及其应用
  • 原文地址:https://blog.csdn.net/yrq205/article/details/126051408