package.json 文件解读

5/20/2020 Node.jspackage.json

# package.json 详情

{
    "name": "mypulgin", //插件、依赖包的名字 要小写
    "version": "1.0.0", //包的版本号。如"1.0.0"
    //name和version是package.json中最重要的两个字段,也是发布到NPM平台上的> 唯一标识,如果没有正确设置这两个字段,包就不能发布和被下载     "description": "My New Project description.",
    //description:包的描述信息,将会在npm search的返回结果中显示,以帮助用户> 选择合适的包
    "main": "index.js",
    //main:包的入口文件。
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    //scripts:通过设置这个可以使NPM调用一些命令脚本,封装一些功能。
    "keywords": [
        "guangju-test-video"
    ],
    //keywords:包的关键词信息,是一个字符串数组,同上也将显示在npm search的> 结果中
    "author": {
        "name": "Your Name",
        "email": "you@mail.com"
    },
    //author:包的作者
    "dist-tags": {
        "latest": "1.0.0"
    },
    "maintainers": [{
        "name": "Your Name",
        "email": "you@mail.com"
    }],
    //maintainers:包的贡献者,是一个数组。
    "time": {
        "modified": "2020-06-26T10:03:30+00:00",
        "created": "2020-06-26T10:03:30+00:00",
        "1.0.0": "2020-06-26T10:03:30+00:00"
    },
    //创建、更新时间,版本信息
    "homepage": "https://my-new-project-website.com/",
    //homepage:包的主页地址
    "repository": {
        "url": "https://example.com/your-username/my-new-project",
        "type": "git"
    },
    //repository:包的仓库地址
    "contributors": [{
            "name": "Your Friend",
            "email": "their-email@mail.com",
            "url": "http://their-website.com"
        },
        {
            "name": "Another Friend",
            "email": "another-email@mail.com",
            "url": "https://another-website.org"
        }
    ],
    //contributors:包的贡献者,是一个数组
    "bugs": {
        "url": "https://github.com/you/my-new-project/issues"
    },
    //bugs:包的bug跟踪主页地址
    "license": "MIT",
    //license:包的开源协议名称
    "readmeFilename": "README.md",
    //自述文件的名字
    "files": ["index.js", "lib/*.js", "bin/*.js"],
    //files(较少用):包所包含的所有文件,可以取值为文件夹。通常我们还是用.> npmignore来去除不想包含到包里的文件。
    "bin": {
        "my-new-project-cli": "bin/my-new-project-cli.js"
    },
    //bin(较少用):如果你的包里包含可执行文件,通过设置这个字段可以将它们包含> 到系统的PATH中,这样直接就可以运行,很方便。
    "dist": {
        "shasum": "908bc9a06fa4421e96ceda243c1ee1789b0dc763",
        "tarball": "https://registry.npmjs.org/my-new-project/-/> my-new-project-1.0.0.tgz"
    },
    "directories": {}
    //directories(较少用):CommonJS包所要求的目录结构信息,展示项目的目录结构> 信息。字段可以是:lib, bin, man, doc, example。值都是字符串
 }

其他参数

  • man(较少用):

为系统的man命令提供帮助文档。帮助文件的文件名必须以数字结尾,如果是压缩的,需> 要以.gz结尾

  • config:

添加一些设置,可以供scripts读取用,同时这里的值也会被添加到系统的环境变量中

  • dependencies:(生产环境)

指定依赖的其它包,这些依赖是指包发布后正常执行时所需要的,也就是线上需要的包。 使用下面的命令来安装:

 npm install --save packageName

如果是开发中依赖的包,可以在devDependencies设置。

  • devDependencies:(开发环境)

这些依赖只有在开发时候才需要。使用下面的命令来安装:

npm install --save-dev packageName
  • peerDependencies:

包相关的依赖,如果你的包是插件,而用户在使用你的包时候,通常也会需要这些依赖(插件),那么可以将依赖列到这里。

如karma, 它的package.json中有设置,依赖下面这些插件:

示例

"peerDependencies": {
  "karma-jasmine": "~0.1.0",
  "karma-requirejs": "~0.2.0",
  "karma-coffee-preprocessor": "~0.1.0",
  "karma-html2js-preprocessor": "~0.1.0",
  "karma-chrome-launcher": "~0.1.0",
  "karma-firefox-launcher": "~0.1.0",
  "karma-phantomjs-launcher": "~0.1.0",
  "karma-script-launcher": "~0.1.0"
}
  • bundledDependencies:

绑定的依赖包,发布的时候这些绑定包也会被一同发布。

  • optionalDependencies(较少用):

即使这些依赖没有,也可以正常安装使用。

  • engines(较少用): 指定包运行的环境。

示例

"engines": {
  "node": ">=0.10.3 < 0.12",
  "npm": "~1.0.20"
}
  • os(较少用):

指定你的包可以在哪些系统平台下运行。

示例

"os": [ "darwin", "linux", "!win32" ]
  • cpu(较少用):

可以指定包运行的cpu架构。

  • private:

设为true这个包将不会发布到NPM平台下。

  • publishConfig(较少用):

这个字段用于设置发布时候的一些设定。尤其方便你希望发布前设定指定的tag或> registry。

# 关于安装依赖包的版本问题

当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号(~)。那么他们到底有什么区别呢

"dependencies": {
    "bluebird": "^3.3.4",
    "body-parser": "~1.15.2"
  }

当我们使用最新的Node运行npm instal --save xxx,的时候,会优先考虑使用插入符号(^)而不是波浪符号(~)

  • 波浪符号(~): 他会更新到当前minor version(也就是中间的那位数字)中最新的版本。放到我们的例子中就是:body-parser:~1.15.2,这个库会去匹配更新到1.15.x的最新版本,如果出了一个新的版本为1.16.0,则不会自动升级。波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。

  • 插入符号(^): 这个符号就显得非常的灵活了,他将会把当前库的版本更新到当前major version(也就是第一位数字)中最新的版本。放到我们的例子中就是:bluebird:^3.3.4,这个库会去匹配3.x.x中最新的版本,但是他不会自动更新到4.0.0。

  • 最后解释下之前提到的minor verision和major version:

1.15.2对应就是MAJOR,MINOR.PATCH:1是marjor version;15是minor version;2是patch version。

  • MAJOR:这个版本号变化了表示有了一个不可以和上个版本兼容的大更改。

  • MINOR:这个版本号变化了表示有了增加了新的功能,并且可以向后兼容。

  • PATCH:这个版本号变化了表示修复了bug,并且可以向后兼容。

因为major version变化表示可能会影响之前版本的兼容性,所以无论是波浪符号还是插入符号都不会自动去修改major version,因为这可能导致程序crush,可能需要手动修改代码

最后提交: 7/15/2022, 10:42:12 AM