• package.json文件配置信息


    1.概述

    每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

    下面是一个最简单的package.json文件,只定义两项元数据:项目名称和项目版本。

    {
      "name" : "xxx",
      "version" : "0.0.0",
    }

    package.json文件就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。比如name就是项目名称,version是版本(遵守“大版本.次要版本.小版本”的格式)。

    下面是一个更完整的package.json文件

     1 { 
     2   "name": "webapp",
     3   "versuion":"1.0.0",
     4   "private": true,
     5   "scripts": {
     6     "start": "roadhog server",
     7     "build": "roadhog build",
     8     "lint": "eslint --ext .js src test",
     9     "http": "http-server dist -p 8000"
    10   },
    11   "engines": {
    12     "install-node": "6.9.2"
    13   },
    14   "dependencies": {
    15     "antd": "^3.0.0",
    16     "aphrodite": "^1.2.5",
    17     "axios": "^0.16.2",
    18     "babel-polyfill": "^6.26.0",
    19     "babel-runtime": "^6.9.2",
    20     "classnames": "^2.2.5",
    21     "console-polyfill": "^0.3.0",
    22     "crypto-js": "^3.1.9-1",
    23     "dva": "^2.1.0",
    24     "dva-loading": "^1.0.0",
    25     "echarts": "^3.8.5",
    26     "echarts-for-react": "^2.0.0",
    27     "global": "^4.3.2",
    28     "jquery": "^3.2.1",
    29     "json-server": "^0.12.1",
    30     "keymaster": "^1.6.2",
    31     "less-vars-to-js": "^1.2.0",
    32     "mockjs": "^1.0.1-beta3",
    33     "path-to-regexp": "^2.1.0",
    34     "qs": "^6.5.1",
    35     "rc-queue-anim": "^1.6.2",
    36     "react": "^16.0.0",
    37     "react-cookie": "^1.0.5",
    38     "react-dom": "^16.0.0",
    39     "socket.io-client": "^1.7.3",
    40     "swiper": "^4.3.3"
    41   },
    42   "devDependencies": {
    43     "babel-core": "^6.26.3",
    44     "babel-eslint": "^7.1.1",
    45     "babel-loader": "^7.1.4",
    46     "babel-plugin-dva-hmr": "^0.3.2",
    47     "babel-plugin-import": "^1.4.0",
    48     "babel-plugin-transform-runtime": "^6.9.0",
    49     "babel-preset-react": "^6.24.1",
    50     "eslint": "^3.12.2",
    51     "eslint-config-airbnb": "^13.0.0",
    52     "eslint-plugin-import": "^2.2.0",
    53     "eslint-plugin-jsx-a11y": "^2.2.3",
    54     "eslint-plugin-react": "^6.8.0",
    55     "expect": "^1.20.2",
    56     "husky": "^0.12.0",
    57     "redbox-react": "^1.3.2",
    58     "redux-logger": "^3.0.6",
    59     "roadhog": "^1.4.1"
    60   }
    61 }

    2.各个字段的含义。

    1.private的含义

    如果这个属性被设置为true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。如果你只想让模块被发布到一个特定的npm仓库,如一个内部的仓库,可与在下面的publishConfig中配置仓库参数。

    2.scripts的含义

    scripts属性是一个对象,里边指定了项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件,value是要执行的命令。
    具体的内容有 install start stop 等,详见https://docs.npmjs.com/misc/scripts

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

    下面的设置指定了npm run startnpm run build等时,所要执行的命令。

      "scripts": {
        "start": "roadhog server",
        "build": "roadhog build",
        "lint": "eslint --ext .js src test",
        "http": "http-server dist -p 8000"
      },

    3.engines的含义

    engines字段指明了该模块运行的平台,比如 Node 的某个版本或者浏览器。

      "engines": {
        "install-node": "6.9.2"
      },

    该字段也可以指定适用的npm版本。

     "engines" : { 

    "npm" : "~1.0.20"
    }

    4.dependencies的含义

    dependencies字段指定了项目运行所依赖的模块,是一个对象,配置模块依赖的模块列表,key是模块名称,value是版本范围,版本范围是一个字符,可以被一个或多个空格分割。
    dependencies也可以被指定为一个git地址或者一个压缩包地址。

     1 version 精确匹配版本
     2 >version 必须大于某个版本
     3 >=version 大于等于
     4 <version 小于
     5 <=versionversion 小于
     6 ~version "约等于",具体规则详见semver文档
     7 ^version "兼容版本"具体规则详见semver文档
     8 1.2.x 仅一点二点几的版本
     9 http://... 见下面url作为denpendencies的说明

    注:不要把测试工具或transpilers写到dependencies中。

    5.devDependencies的含义

    devDependencies指定项目开发所需要的模块。

    如果有人想要下载并使用你的模块,也许他们并不希望或需要下载一些你在开发过程中使用的额外的测试或者文档框架。
    在这种情况下,最好的方法是把这些依赖添加到devDependencies属性的对象中。
    这些模块会在npm link或者npm install的时候被安装,也可以像其他npm配置一样被管理,详见npm的config文档。
    对于一些跨平台的构建任务,例如把CoffeeScript编译成JavaScript,就可以通过在package.json的script属性里边配置prepublish脚本来完成这个任务,然后需要依赖的coffee-script模块就写在devDependencies属性种。

      "devDependencies": {
        "babel-core": "^6.26.3",
        "babel-eslint": "^7.1.1",
        "babel-loader": "^7.1.4",
        "babel-plugin-dva-hmr": "^0.3.2",
        "babel-plugin-import": "^1.4.0",
        "babel-plugin-transform-runtime": "^6.9.0",
        "babel-preset-react": "^6.24.1",
        "eslint": "^3.12.2",
        "redbox-react": "^1.3.2",
        "redux-logger": "^3.0.6",
        "roadhog": "^1.4.1"
      }

    注:

    dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发所需要的模块。

    它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。

    $ npm install express --save
    $ npm install express --save-dev
    
    上面代码表示单独安装express模块,--save参数表示将该模块写入dependencies属性,--save-dev表示将该模块写入devDependencies属性。

    3.其他字段

    6.peerDependencies的含义

    有时候做一些插件开发,比如grunt等工具的插件,它们往往是在grunt的某个版本的基础上开发的,而在他们的代码中并不会出现require("grunt")这样的依赖,dependencies配置里边也不会写上grunt的依赖,为了说明此模块只能作为插件跑在宿主的某个版本范围下,可以配置peerDependencies:

      "peerDependencies": {
        "tea": "2.x"
      }

    7.os

    可以指定你的模块只能在哪个操作系统上跑:
    "os" : [ "darwin", "linux" ]
    也可以指定黑名单而不是白名单:
    "os" : [ "!win32" ]
    服务的操作系统是由process.platform来判断的,这个属性允许黑白名单同时存在,虽然没啥必要这样搞...

    8.cpu

    限制模块只能在某某cpu架构下运行
    "cpu" : [ "x64", "ia32" ]
    同样可以设置黑名单:
    "cpu" : [ "!arm", "!mips" ]
    cpu架构通过 process.arch 判断

    9 DEFAULT VALUES

    npm设置了一些默认参数,如:
    "scripts": {"start": "node server.js"}
    如果模块根目录下有一个server.js文件,那么npm start会默认运行这个文件。
    "scripts":{"preinstall": "node-gyp rebuild"}
    如果模块根目录下有binding.gyp, npm将默认用node-gyp来编译preinstall的脚本
    "contributors": [...]
    若模块根目录下有AUTHORS 文件,则npm会按Name (url)格式解析每一行的数据添加到contributors中,可以用#添加行注释

    4.参考文档列表(https://docs.npmjs.com/)

  • 相关阅读:
    待思考问题---数据库的分层模型
    iOS的常用类库
    java spring是元编程框架---使用的机制是注解+配置
    Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java
    Spring注解的使用和组件扫描
    Spring Boot实战:拦截器与过滤器
    问题、存在与认知---问题产生的原因是对存在的不完全或错误认知
    元编程的分层模型
    元编程的本质---高级语言的表达通过解释生成低级语言的表达(代码)
    aop分层模型——aop是元编程的一种
  • 原文地址:https://www.cnblogs.com/gaoht/p/9323226.html
Copyright © 2020-2023  润新知