本文输出Node中和包有关的基本内容。

1.0 Node中的模块和包

模块

在Node中,以模块为单位来划分所有的功能。

从某种角度来说,Node应用都由大量模块组成,每个模块都是一个JavaScript文件。Node提供了完成的模块加载机制,模块模块加载机制这种设计让我们能够将应用程序划分成多个不同的部分,可以对这些部分进行协同管理,还能够——

  • 提高应用程序的开发效率
  • 提高应用程序代码的可读性
  • 减少应用程序的代码量(重用代码)


在Node中,通过包来对一组具有相互依赖关系的模块进行统一管理。

Node中的包事实上所指代的是一个文件目录,该目录中主要包含以下内容:

①   在bin子目录中存放二进制文件。
②   在lib子目录中存放JavaScript文件。
③   在doc子目录中存放与包使用相关的说明性文档。
④   在dist子目录中存放JavaScript文件(发布)。
⑤   在test子目录中存放用于对包进行单元测试的文件。
⑥   在包的根目录中存放包含用于描述包信息的package.json文件。

这里列出典型的包的目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//该目录结构通过使用$ npm install less命令安装并进入到less包文件目录获取。
.
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE
├── README.md
├── appveyor.yml
├── bin
│   └── lessc
├── bower.json
├── browser.js
├── dist
│   ├── less.js
│   └── less.min.js
├── index.js
├── lib
│   ├── less
│   ├── less-browser
│   ├── less-node
│   └── source-map
├── package.json
└── test
├── browser
├── copy-bom.js
├── css
├── data
├── import-module
├── index.js
├── less
├── less-bom
├── less-test.js
├── modify-vars.js
├── plugins
└── sourcemaps

2.0 package.json文件

package.json文件用于对包进行描述,JSON格式文件。

package.json文件的主要字段

name 包的名称。
scripts 定义脚本命令。
main 包的主文件。
version 包的版本号。
homepage 包的主页地址。
bugs bug的提交地址,可能是url地址或邮箱地址。
author 作者信息(对象),包含作者姓名(name)和主页(url)以及邮箱(email)等。
license 该包采用的开源协议,常见的有MIT、Apache 和GPL等。
keywords 用于搜索的关键字数组( $ npm search xxx)。
description 包描述信息,对包进行简单的说明。
repository 托管仓库相关的信息,通常包括仓库的类型(type)和托管地址(url)。
dependencies 运行时需要依赖的包(对象类型:由包名和版本信息组成)。
devDependencies 开发时需要依赖的包(对象类型:由包名和版本信息组成),上线时不会打包。

这里列出典型的json文件的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//备注:列出的是jQuery框架的package.josn文件,可通过$ npm install jquery安装
{
"author": {
"name": "JS Foundation and other contributors",
"url": "https://github.com/jquery/jquery/blob/3.3.1/AUTHORS.txt"
},
"bugs": {
"url": "https://github.com/jquery/jquery/issues"
},
"bundleDependencies": false,
"commitplease": {
"nohook": true,
"components": [
"Docs",
"Tests",
"Build",
"Support",
"Release",
"Core",
"Ajax",
"Attributes",
"Callbacks",
"CSS",
"Data",
"Deferred",
"Deprecated",
"Dimensions",
"Effects",
"Event",
"Manipulation",
"Offset",
"Queue",
"Selector",
"Serialize",
"Traversing",
"Wrap"
],
"markerPattern": "^((clos|fix|resolv)(e[sd]|ing))|^(refs?)",
"ticketPattern": "^((Closes|Fixes) ([a-zA-Z]{2,}-)[0-9]+)|^(Refs? [^#])"
},
"dependencies": {},
"deprecated": false,
"description": "JavaScript library for DOM operations",
"devDependencies": {
"babel-core": "7.0.0-beta.0",
"babel-plugin-transform-es2015-for-of": "7.0.0-beta.0",
"commitplease": "2.7.10",
"core-js": "2.4.1",
"eslint-config-jquery": "1.0.1",
"grunt": "1.0.1",
"grunt-babel": "7.0.0",
"grunt-cli": "1.2.0",
"grunt-compare-size": "0.4.2",
"grunt-contrib-uglify": "3.0.1",
"grunt-contrib-watch": "1.0.0",
"grunt-eslint": "20.0.0",
"grunt-git-authors": "3.2.0",
"grunt-jsonlint": "1.1.0",
"grunt-karma": "2.0.0",
"grunt-newer": "1.3.0",
"grunt-npmcopy": "0.1.0",
"gzip-js": "0.3.2",
"husky": "0.14.3",
"insight": "0.8.4",
"jsdom": "5.6.1",
"karma": "1.7.0",
"karma-browserstack-launcher": "1.3.0",
"karma-chrome-launcher": "2.2.0",
"karma-firefox-launcher": "1.0.1",
"karma-qunit": "1.2.1",
"load-grunt-tasks": "3.5.2",
"native-promise-only": "0.8.1",
"promises-aplus-tests": "2.1.2",
"q": "1.5.0",
"qunit-assert-step": "1.0.3",
"qunitjs": "1.23.1",
"raw-body": "2.2.0",
"requirejs": "2.3.3",
"sinon": "2.3.7",
"sizzle": "2.3.3",
"strip-json-comments": "2.0.1",
"testswarm": "1.1.0",
"uglify-js": "3.3.4"
},
"homepage": "https://jquery.com",
"keywords": [
"jquery",
"javascript",
"browser",
"library"
],
"license": "MIT",
"main": "dist/jquery.js",
"name": "jquery",
"repository": {
"type": "git",
"url": "git+https://github.com/jquery/jquery.git"
},
"scripts": {
"build": "npm install && grunt",
"commitmsg": "node node_modules/commitplease",
"jenkins": "npm run test:browserless",
"precommit": "grunt lint:newer qunit_fixture",
"start": "grunt watch",
"test": "grunt && grunt test:slow && grunt karma:main",
"test:browser": "grunt && grunt karma:main",
"test:browserless": "grunt && grunt test:slow"
},
"title": "jQuery",
"version": "3.3.1"
}