package.json是什么?

直接的说:就是管理你本地安装的npm包 
一个package.json文件可以做如下事情:

展示项目所依赖的npm包 
允许你指定一个包的版本[范围] 
让你建立起稳定,意味着你可以更好的与其他开发者共享

创建package.json

在你要创建的目录下执行:npm init,系统会一一提示设置相关配置。提示设置的字段均为必填字段(有的可以用回车键,即设置为空带过)

  • npm init –yes|-y: 执行此命令,则会直接创建一个package.json,只配置了一些必填字段,并且给出默认值。其中name: 所处的文件夹名称

package.json配置说明

这里说的项目广义,比如:我们可以把我们的项目发布成一个npm包

  • name: 项目名称
  • version: 项目版本号
  • description: 项目描述
  • keywords: {Array}关键词,便于用户搜索到我们的项目
  • homepage: 项目url主页
  • bugs: 项目问题反馈的Url或email配置,如: 

    “url” : “https://github.com/owner/project/issues“, 
    “email” : “project@hostname.com” 
    }

  • license: 项目许可证,让使用者知道是如何被允许使用此项目。默认是”ISC”

  • author,contributors: 坐着和贡献者。格式设置如下: 
    { “name” : “Barney Rubble” 
    , “email” : “b@rubble.com” 
    , “url” : “http://barnyrubble.tumblr.com/” 
    }

  • files: 包含在项目中的文件数组。如果在数组里面声明了一个文件夹,那也会包含文件夹中的文件。可以声明一些规则来忽略部分文件。可以在项目根目录或者子目录里声明一个.npmignore。

Certain files are always included, regardless of settings:

package.json 
README (and its variants) 
CHANGELOG (and its variants) 
LICENSE / LICENCE 
Conversely, some files are always ignored:

.git 
CVS 
.svn 
.hg 
.lock-wscript 
.wafpickle-N 
*.swp 
.DS_Store 
._* 
npm-debug.log

    • main: 主文件。比如默认是index.js,项目名称叫mymodule。那么require(‘mymodule’)将返回index.js返回的内容
    • bin: 项目用到的可执行文件配置
    • man: 指定一个单一的文件名或一个文件名数组。意思类似于linux命令中的man 命令,来查看一个命令的用法 

      如果只给man字段提供一个文件,则安装完毕后,它就是man 的结果,这和此文件名无关


      “name”: “foo”, 
      “version”: “1.2.3”, 
      “description”: “A packaged foo fooer for fooing foos”, 
      “main”: “foo.js”, 
      “man”: “./man/doc.1” 

      上面这个配置将会在执行man foo时就会使用./man/doc.1这个文件。

如果指定的文件名并未以包名开头,那么它会被冠以前缀,像这样


“name”: “foo”, 
“version”: “1.2.3”, 
“description”: “A packaged foo fooer for fooing foos”, 
“main”: “foo.js”, 
“man”: [ 
“./man/foo.1”, 
“./man/bar.1” 


这将会为man foo和man foo-bar创建文件

man文件必须以一个数字结尾,和一个可选的.gz后缀(当它被压缩时)。这个数字说明了这个文件被安装到哪个节中


“name”: “foo”, 
“version”: “1.2.3”, 
“description”: “A packaged foo fooer for fooing foos”, 
“main”: “foo.js”, 
“man”: [ 
“./man/foo.1”, 
“./man/foo.2” 


会为使用man foo和man 2 foo而创建

  • directories: CommonJS Packages规范说明了几种你可以用directories对象来标示你的包结构的方法
  • directories.lib: 告诉你库文件夹的位置,目前没有什么地方需要用到lib文件夹,但是这是重要的元信息
  • directories.bin: 如果你在directories.bin中指定一个bin目录,在这个目录中的所有文件都会被当做在bin来使用。

    由于bin指令的工作方式,同时指定一个bin路径和设置directories.bin将是一个错误。如果你想指定独立的文件,使用bin,如果想执行某个文件夹里的所有文件,使用directories.bin。

  • directories.doc: 把markdown文件放在这。也许某一天这些文件将被漂亮地展示出来,不过这仅仅是也许

  • directories.man: directories.man指定的文件夹里都是man文件,系统通过遍历这个文件夹来生成一个man的数组
  • directories.example: 把示例脚本放在这。也许某一天会被用到
  • repository: 项目代码存放地方

    “repository” : 
    { “type” : “git” 
    , “url” : “https://github.com/npm/npm.git” 

    “repository” : 
    { “type” : “svn” 
    , “url” : “https://v8.googlecode.com/svn/trunk/” 
    }

  • scripts: 声明一系列npm脚本指令

    1. prepublish: 在包发布之前运行,也会在npm install安装到本地时运行
    2. publish,postpublish: 包被发布之后运行
    3. preinstall: 包被安装前运行
    4. install,postinstall: 包被安装后运行
    5. preuninstall,uninstall: 包被卸载前运行
    6. postuninstall: 包被卸载后运行
    7. preversion: bump包版本前运行
    8. postversion: bump包版本后运行
    9. pretest,test,posttest: 通过npm test命令运行
    10. prestop,stop,poststop: 通过npm stop命令运行
    11. prestart,start,poststart: 通过npm start命令运行
    12. prerestart,restart,postrestart: 通过npm restart运行
  • config: 配置项目中需要的配置参数:

    { “name” : “foo” 
    , “config” : { “port” : “8080” } 
    , “scripts” : { “start” : “node server.js” } } } 
    server.js中使用process.env.npm_package_config_port来访问port 
    用户也可以这样修改:npm config set foo:port 80

  • dependencies: 项目在生产环境中依赖的包

  • devDependencies: 项目在开发和测试环境中依赖的包
  • peerDependencies: 在某些情况下,当一个主机无法require依赖包时,你会想要告诉它还有哪些工具或库与这个依赖包兼容。这通常被成为一个插件。尤其是在host文档中声明的模块会暴露一个特定的接口


    “name”: “tea-latte”, 
    “version”: “1.3.5”, 
    “peerDependencies”: { 
    “tea”: “2.x” 


    这将确保tea-latte这个包只会和2.x版本的tea一起被安装。执行npm install tea-latte可能产生以下关系图: 
    ├── tea-latte@1.3.5 
    └── tea@2.2.0

  • bundledDependencies: {Array},发布时会被一起打包的模块

  • optionalDependencies: 如果一个依赖模块可以被使用, 同时你也希望在该模块找不到或无法获取时npm继续运行,你可以把这个模块依赖放到optionalDependencies配置中。这个配置的写法和dependencies的写法一样,不同的是这里边写的模块安装失败不会导致npm install失败。当然,这种模块就需要你自己在代码中处理模块确实的情况了,例如:

    try { 
    var foo = require(‘foo’) 
    var fooVersion = require(‘foo/package.json’).version 
    } catch (er) { 
    foo = null 

    if ( notGoodFooVersion(fooVersion) ) { 
    foo = null 

    // .. then later in your program .. 
    if (foo) { 
    foo.doFooThings() 
    }

  • engines: 声明项目需要的node或npm版本范围

    { “engines” : { “npm” : “~1.0.20” } } 
    { “engines” : { “node” : “>=0.10.3 <0.12” } }

  • os: 指定你的项目将运行在什么操作系统上

  • cpu: 指定你的项目将运行在什么cpu架构上
  • preferGlobal: 如果你的包需要全局安装,通过命令行来运行,那么设置为true。如果这个包被本地安装则会出现一个警告
  • private: 如果设置为true, 那么npm会拒绝发布它
  • publishConfig

参考文档

https://docs.npmjs.com/files/package.json

package.json说明的更多相关文章

  1. npm package.json属性详解

    概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...

  2. NodeJS中 package.json各属性分析

    package.json 中包含各种所需模块以及项目的配置信息(名称.版本.许可证等)meta 信息. Name:它属于必须字段,在package.json中最重要的就是name和version字段, ...

  3. package.json for npm中依赖外部组件时常用的版本符号含义

    package.json中会有dependencies定义了项目依赖的外部组件,这些外部组件的依赖都是带有版本符号以表示被依赖组件的版本范围. { "dependencies" : ...

  4. package.json

    1,项目按住shift,右击鼠标:"在此处打开命令行窗口" 2,cmd输入:npm init 输入name,varsion....license项的信息,yes 3,此项目中自动创 ...

  5. nwjs 配置文件package.json 转载

    配置文件package.json nw在启动应用程序时,首先要读取package.json文件,初始化基本属性,下面我们看看package.json的完整参数.每个参数配置都标有注释. { /**指定 ...

  6. Node.js~sails.js~package.json的作用

    回到目录 我们在sails框架进行node.js开发时,会涉及到项目的迁移,当迁移后可能你的module即丢失,这时,希望快速的安装所有的包包,可以使用下面命令 1 cd 你当前的sails项目 2 ...

  7. npm中package.json详解

    通常我们使用npm init命令来创建一个npm程序时,会自动生成一个package.json文件.package.json文件会描述这个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息,格 ...

  8. NodeJS中 package.json 解析

    package.json 中包含各种所需模块以及项目的配置信息(名称.版本.许可证等)meta 信息. 包含可配置项 name 名称 应用描述 description 版本号 version 应用的配 ...

  9. 在package.json里面的script设置环境变量,区分开发及生产环境。注意mac与windows的设置方式不一样

    在package.json里面的script设置环境变量,区分开发及生产环境. 注意mac与windows的设置方式不一样. "scripts": { "publish- ...

  10. NodeJS package.json

    #3 NodeJS package.json 工作目录 package.json 导航至工作目录后,执行下图中的命令

随机推荐

  1. devicetree推荐教程

    https://www.cnblogs.com/aaronLinux/p/5496559.html

  2. CSP2019 前 随感

    因为博主并没有任何的 oi 水平.文化课水平以及作文水平,下面的东西都是对辞藻和古诗词的堆砌. 不知不觉又到了新一年的 noip 了. 好像是去年的双十一的晚上,noip 考挂的我绝望地写了 bzoj ...

  3. 激活函数:Sigmod&tanh&Softplus&Relu详解

    什么是激活函数? 激活函数(Activation functions)对于人工神经网络模型去学习.理解非常复杂和非线性的函数来说具有十分重要的作用. 它们将非线性特性引入到我们的网络中.其主要目的是将 ...

  4. SweetAler弹框插件与分页器插件

    目录 SweetAlert插件 自定义分页器 使用Django向数据库批量插入数据 自定义分页器的思路 自定义分页器组件 SweetAlert插件 sweetalert是一款基于Bootstrap的专 ...

  5. 前端面试题常考&必考之--用jquery写出当前元素的同辈元素的第二个结点的value值

    问题:用jquery写出当前元素的同辈元素的第二个结点的value值??? 分析:该题目有一个坑,那就是,如果当前元素没有第二个兄弟结点呢(坑坑坑) 解析: 一般我们可能会这样写: $(this).s ...

  6. 原生js控制控制--弹窗的显示和隐藏

    以防浪费大家的时间,还是先上效果图吧,满足您的需求就往下look吧. 重要知识点:点击其他地方,也就是除了小叉子之外的地方也能够关闭弹窗哦.代码已标红    html代码: <button id ...

  7. 五年双十一:SLS数据管道发展之路

    日志服务SLS是一款飞天团队自研产品,服务云上云下3W+客户,并在阿里经济体中作为日志数据的基础设施,在过去几年中经历多次双十一.双十二.新春红包锤炼.在2019双十一中: 服务阿里经济体3W+ 应用 ...

  8. kohana 语言资源国际化、本地化

    语言配置开关: root@DESKTOP-I4OIMJC /cygdrive/e/html/tproject/framebota/platform # grep -n2 'I18n::lang' bo ...

  9. 【BZOJ2200】道路和航线(并查集,拓扑排序,最短路)

    题意:n个点,有m1条双向边,m2条单向边,双向边边长非负,单向边可能为负 保证如果有一条从x到y的单项边,则不可能存在从y到x的路径 问从S出发到其他所有点的最短路 n<=25000,n1,m ...

  10. 快速获取批量处理Docker镜像SQL语句

    .获取批量pull语句 select concat('docker pull develop-harbor.geostar.com.cn/', t.name, ':', t1.tag) name fr ...