本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢!

  上节课,我们打造了一下IDE工具-web storm的显示界面。至少现在回到熟悉的sublime text界面了。这节课就开始正式学习nodejs了。

  当我在web-storm创建了一个nodejs工程之后,首先浏览了一下工程结构,如下图所示:

  Nodejs 的工程结构还是较为简单的。各个目录功能基本都能猜个八九不离十。但在最下面的package.json文件引起了我的注意。从名称上面来看应该是一个存储元数据的文件,到底是不是呢?我们打开它看一下:

  从package.json内容中来看,其存储的不只有metedata,还有很多其它数据。例如版本号,依赖包等等。如此看来,package.json貌似很重要的样子。那么问题就来了:package.json到底是做什么的?

  Nodejs官网给出的解释,package.json主要有两个功能:

  1. 用来保存工程元数据。
  2. 还可以用来描述工程的依赖项。

  为了深入理解package.json,我们从nodejs官网下载一个完整的package.json示例,如下:

  1. {
  2.  
  3.   "name": "module-name",
  4.  
  5.   "version": "10.3.1",
  6.  
  7.   "description": "An example module to illustrate the usage of a package.json",
  8.  
  9.   "author": "Your Name <you.name@example.org>",
  10.  
  11.   "contributors": [
  12.  
  13.     {
  14.  
  15.       "name": "Foo Bar",
  16.  
  17.       "email": "foo.bar@example.com"
  18.  
  19.     }
  20.  
  21.   ],
  22.  
  23.   "bin": {
  24.  
  25.       "module-name": "./bin/module-name"
  26.  
  27.     },
  28.  
  29.   "scripts": {
  30.  
  31.     "test": "vows --spec --isolate",
  32.  
  33.     "start": "node index.js",
  34.  
  35.     "prepublish": "coffee --bare --compile --output lib/foo src/foo/*.coffee"
  36.  
  37.   },
  38.  
  39.   "main": "lib/foo.js",
  40.  
  41.   "repository": {
  42.  
  43.     "type": "git",
  44.  
  45.     "url": "https://github.com/nodejitsu/browsenpm.org"
  46.  
  47.   },
  48.  
  49.   "bugs": {
  50.  
  51.     "url": "https://github.com/nodejitsu/browsenpm.org/issues"
  52.  
  53.   },
  54.  
  55.   "keywords": [
  56.  
  57.     "nodejitsu",
  58.  
  59.     "example",
  60.  
  61.     "browsenpm"
  62.  
  63.   ],
  64.  
  65.   "dependencies": {
  66.  
  67.     "primus": "*",
  68.  
  69.     "async": "~0.8.0",
  70.  
  71.     "express": "4.2.x",
  72.  
  73.     "winston": "git://github.com/flatiron/winston#master",
  74.  
  75.     "bigpipe": "bigpipe/pagelet",
  76.  
  77.     "plates": "https://github.com/flatiron/plates/tarball/master"
  78.  
  79.   },
  80.  
  81.   "devDependencies": {
  82.  
  83.     "vows": "^0.7.0",
  84.  
  85.     "assume": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
  86.  
  87.     "pre-commit": "*"
  88.  
  89.   },
  90.  
  91.   "preferGlobal": true,
  92.  
  93.   "private": true,
  94.  
  95.   "publishConfig": {
  96.  
  97.     "registry": "https://your-private-hosted-npm.registry.nodejitsu.com"
  98.  
  99.   },
  100.  
  101.   "license": "MIT"
  102.  
  103. }

  我们逐一看一下上述各个属性都是做什么的。

  Name:

  这个npm包的名称,使用时只需要注意名称为小写,同时保持唯一性。如果你决定将此包发布到npm官方仓库,那么此名称就是此包在仓库中的唯一标示。

  Version:

  这个包的版本号。默认风格是: 主版本.此版本.补丁版本。例如:10.3.1 。 这里面10是主版本,3是次版本,1是补丁版本。每次小的修改应该是补丁版本在变化。如果有大的代码或者功能变更,才会涉及到主版本号的变更。

  Description:

  这个包的描述信息,主要用来描述此包有哪些功能,已经如何使用。使用此属性的原则就是简单精炼。

  author

  没啥可说的。这就是作者的联系方式。 毕竟都是开源工具,如果其他人发现软件包有bug,或者其他问题。可以通过作者的联系方式,相互沟通确认。

  contributors

  这一栏是用于描述对此包有突出贡献的人及其联系方式。这个属性是一个对象数值,不用吝啬空间。有多少人就写多少人。

  bin

  此属性是用来标记软件包中可执行脚本位置的。当使用此属性时,需要输入脚本的相对路径。当在CLI中调用此包时,就会直接调用到此属性所标记的脚本。

  script

  script可以用来保存一些脚本。这些脚本在执行npm run {command name}或者npm run-script {command name}时就会运行。如果需要运行包内部的命令,直接使用命令名称就可以,而不必在敲入命令的相对路径。比如需要执行mocha时,直接写mocha就可以而不用写./node-modules/.bin/mocha了。

  在上面的例子中,如果想要执行这个包的test脚本,那么当输入npm test时,就会调用到test所对应的命令了。

  main

  包的入口函数。用在代码调用此包时:require('{module name}')。 同其它语言一样,单单引入一个包并不会执行其内部的代码。所以当在其它代码中引入此包后,仍然需要通过手工写代码来实现调用。

  repostitory

  此属性用来标记此包源代码位置。如果你允许其它人修改你的代码,那么就提供源代码的位置。这样才会有更多的开发人员来提交代码分支,为代码做出贡献。 在上面的例子中,使用的是git仓库。但并不是只能使用git,任何源代码控制软件都可以。

  bugs

  只要是代码,就一定会存在bug。如果有人发现了bug,就可以提交到此属性所标记的地址。一方面是告诉作者,包里有bug。另外更重要的时提供了一个讨论的场合。作为程序员来说,沟通和讨论往往比闷头写代码更重要。

  keywords

  前面提到过,作者可以把此包提交到npm仓库中。此值所设定的就是其他人搜索的关键词。如果想让更多的人使用到此包,那么就尽可能的设定一些更贴合包功能的关键词吧。

  Dependencies

  依赖项。 而且是此包的依赖项。当其他人安装此包时,此属性所标记的依赖包将会被一并安装上。因此,软件包是否可以正常工作,依赖项就显得尤为重要了。

  这里面:

  1. *和""都表示所有版本
  2. ~version表示大约是哪个版本,而^version表示兼容版本
  3. Version1-version2表示介于version1和version2之间的版本,包括version1和version2.
  4. Path/path/path表示依赖的是本地代码
  5. 也支持http和https远程代码
  6. Git,当然也支持。

  devDependencies

 和上面的依赖项功能差不多,但更多是在开发阶段和测试阶段标记有哪些依赖项。如果要使用这个属性的依赖项,那么就执行npm install –dev。

  preferGlobal

  只会在CLI中用到此属性,是用来标记此包是否支持全局安装的。

  private

  如果设为true了。那么此包就不会被发布到npm仓库中。

  publishConfig

  标记发布地址。这个地址不一定是npm官方仓库,也可以是team的私有仓库。只要能保存此包就可以。性质嘛,不重要。

  license

  许可证。虽然在国内,许可证不是很受人重视。但既然我们用了开源软件,就要遵守开源的游戏规则。该用什么许可就用什么许可。大多数情况下都是MIT许可。

Nodejs课堂笔记-第二课 package.json的作用的更多相关文章

  1. Nodejs课堂笔记—第一课:修改Webstorm的默认主题

    最近小半年一直在忙于研究Docker源码,也在写相关的分析文章.但受限于某些条件不能发布到网上,甚为郁闷.而最近几天,接到新的开发任务,需要使用nodejs.之前一直听说过nodejs,但从来没有真正 ...

  2. package-lock.json和package.json的作用

    转自:https://www.cnblogs.com/cangqinglang/p/8336754.html package-lock.json的作用就是锁定安装依赖时包的版本,并且需要上传到git, ...

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

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

  4. 在本地文件当中package.json的作用

    除了常见的指定包的相关依赖,一些包的相关信息之外 main: 它是用来指定当前包的入口文件,容易让人忽视的一点是它不仅仅在发布的npm包当中有用,在你的业务代码当中也具有一样的作用. 例如,我需要一个 ...

  5. Nodejs课堂笔记-第四课 Dynamodb为何物

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 我喜欢带着目标来学习新知识.因此学习nodejs过程中,不喜欢只看枯燥的语法 ...

  6. Nodejs课堂笔记-第三课 构建一个nodejs的Docker镜像

    本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 因为一直做Linux有关的开发工作,所以不习惯在Windows平台编译和测试 ...

  7. .NET高级代码审计(第二课) Json.Net反序列化漏洞

    0X00 前言 Newtonsoft.Json,这是一个开源的Json.Net库,官方地址:https://www.newtonsoft.com/json ,一个读写Json效率非常高的.Net库,在 ...

  8. Python学习笔记 第二课 循环

    >>> movies=["The Holy Grail", 1975, "The Life of Brian", 1979, "Th ...

  9. IP通信基础课堂笔记----第二章(重点)

    TCP报文及传输 TCP报文主要学习的内容包括,报文格式.连接管理.流量控制.差错控制. TCP报文是由报文头部和数据两个部分组成.占20字节的报文头部包括源端口.位目的端口.序号..确认号.首部长度 ...

随机推荐

  1. NSDate 类的总结,全面基础

    <span style="font-size:24px;"><span style="font-size:18px;">//1.创建日期 ...

  2. mysql :安装过程中的问题

    安装mysql  选择路径的问题 出现如下问题:说明之前安装过mysql,写在的不干净

  3. 《TCP/IP具体解释卷2:实现》笔记--IP的分片和重装

    IP首部内有三个字段实现分片和重装:标识字段(ip_id).标志字段(ip_off的3个高位比特)和偏移字段(ip_off的13个低位 比特).标志字段由3个1bit标志组成.比特0是保留的必须为0, ...

  4. Jmeter3.0-多维度的图形化HTML报告

    本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...

  5. Java 常见的异常错误分析大集合

      算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:Negative ...

  6. 【Lucene】Apache Lucene全文检索引擎架构之入门实战1

    Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻.在Java开发环境里Lucene是一个成熟的 ...

  7. .net core 2.0小白笔记(一):开发运行环境搭建

    小白一枚,有任何不妥之处敬请指教 这里不讨论什么设计模式,什么架构,什么什么,就是入门,简单的入门,虽然能跨平台,但是这里还是在win的环境下进行,不扯的那么远 其实官网文档写的挺不错的了,就是偶尔有 ...

  8. Android IntentService全然解析 当Service遇到Handler

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47143563: 本文出自:[张鸿洋的博客] 一 概述 大家都清楚.在Andro ...

  9. 二分Kmeans的java实现

    刚刚研究了Kmeans.Kmeans是一种十分简单的聚类算法.可是他十分依赖于用户最初给定的k值.它无法发现随意形状和大小的簇.最适合于发现球状簇.他的时间复杂度为O(tkn).kmeans算法有两个 ...

  10. tornado 初学

    tornado第一个例子 import tornado.ioloopimport tornado.web class MainHandler(tornado.web.RequestHandler): ...