<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
|
|
51CTO旗下网站
|
|
移动端

1.2.1 CommonJS 的包规范

《Node.js:来一打 C++ 扩展》第1章Node.js 的 C++ 扩展前驱知识储备,本章开始,笔者将逐步扩充读者对于 Node.js 的 C++ 模块开发的前驱知识储备,包括JavaScript 和 Node.js 的模块机制、包机制,Node.js 的源码依赖和对于开发环境所需要做的准备工作。本节为大家介绍CommonJS 的包规范。

作者:死月来源:电子工业出版社|2018-08-08 20:30

1.2 Node.js 的包机制

在1.1 节中笔者讲述了Node.js 中以文件作为粒度的模块机制,接下来要讲的是一个或者多个模块结合起来的 Node.js 包机制。

1.2.1 CommonJS 的包规范

CommonJS 规范中的包(package)指的是一系列模块、代码以及其他资源文件的一个封装。它为 CommonJS 输出内容的交付、安装、管理等提供了一个方便的途径。

一个 CommonJS 包必然含有一个包描述文件,以及可选地包含了一些代码、资源等内容。

本书中?#27493;?#30340; CommonJS 规范为 1.0 规范。

1. 包描述文件

一个遵循 CommonJS 规范的包必然包含一个包描述文件,并且它处于包根目录下,名为package.json。

在这个 JSON 文件中指定了这个包的一些必要信息,如表 1-1 所示。

表1-1 CommonJS 包描述文件的必填字段

除了上述的必填字段之外,官?#20132;?#25351;定了一些有用的选填字段,如表 1-2 所示。

表1-2 CommonJS 包描述文件的选填字段

注意:遵循 CommonJS 规范的包管理器和运行程序会忽略包描述文件中的未知字段名(即未在上述规范中声明的字段),这些字段可以让开发者定义一些个性化的内容。

但是需要注意的是还有一些字段虽然未在上面列出,但是作为保留字段有可能会在未来被使用,开发者在定义个性化字段的时候应当避免使用这些保留字段。

保留字段如下:build、default、email、external、files、imports、main tainer、paths、platform、require、summary、test、using、downloads、uid、type。

下面给出一个简单的遵循 CommonJS 包规范的描述文件。

  1. {  
  2. "name": "mypackage",  
  3. "version": "0.7.0",  
  4. "description": "Sample package for CommonJS. This package demonstrates the  
  5. name": "Bill Smith",  
  6. "email": "[email protected]",  
  7. "web": "http://www.example.com"  
  8. }  
  9. ],  
  10. "contributors": [  
  11. {  
  12. "name": "Mary Brown",  
  13. "email": "[email protected]",  
  14. "web": "http://www.embedthis.com"  
  15. }  
  16. ],  
  17. "bugs": {  
  18. "mail": "[email protected]",  
  19. "web": "http://www.example.com/bugs"  
  20. },  
  21. "licenses": [  
  22. {  
  23. "type": "GPLv2",  
  24. "url": "http://www.example.org/licenses/gpl.html"  
  25. }  
  26. ],  
  27. "repositories": [  
  28. {  
  29. "type": "git",  
  30. "url": "http://hg.example.com/mypackage.git"  
  31. }  
  32. ],  
  33. "dependencies": {  
  34. "webkit": "1.2",  
  35. "ssl": {  
  36. "gnutls": ["1.0", "2.0"],  
  37. "openssl": "0.9.8"  
  38. }  
  39. },  
  40. "implements": ["cjs-module-0.3", "cjs-jsgi-0.1"],  
  41. "os": ["linux", "macos", "win"],  
  42. "cpu": ["x86", "ppc", "x86_64"],  
  43. "engines": ["v8", "ejs", "node", "rhino"],  
  44. "scripts": {  
  45. "install": "install.js",  
  46. "uninstall": "uninstall.js",  
  47. "build": "build.js",  
  48. "test": "test.js"  
  49. },  
  50. "directories": {  
  51. "lib": "src/lib",  
  52. "bin": "local/binaries",  
  53. "jars": "java"  
  54. }  

2. 包格式

CommonJS 包的格式是一个包含整个包目录(尤其是 package.json 文件)的 ZIP 格式压缩包,?#36824;?#20854;有可能在未来版本的规范中有所不同。

3. 包目录结构

一个遵循 CommonJS 规范的包目录特点如下:

package.json 在根目录下;

二进制文件应当在 bin 目录下;

JavaScript 源码应当在 lib 目录下;

文档应当在 doc 目录下;

单元测试文件应当在 test 目录下。


?#19981;?#30340;朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你?#19981;?/dt>

订阅专栏+更多

活学活用 Ubuntu Server

活学活用 Ubuntu Server

实战直通车
共35章 | UbuntuServer

216人订阅学习

Java EE速成指南

Java EE速成指南

掌握Java核心
共30章 | 51CTO王波

83人订阅学习

Mysql DBA修炼之路

Mysql DBA修炼之路

MySQL入门到高阶
共24章 | 武凤涛

468人订阅学习

读 书 +更多

Linux安全体系分析与编程

本书选择经典的开放源代码,全面系统地分析了Linux安全机制。本书共有17章,前10章着重介绍了Linux操作系统的安全机制及实现方法,阐述了公...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客

澳洲幸运5官方
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
南昌沐足软件 时时彩预测免费软件 01彩票官方下载 ak彩票平台 东莞小姐哪里找 非凡炸金花玩的人多吗 北京pk拾赛车高手论坛 足球竞彩计划跟单能赚钱吗 欧泊彩票app 哈尔滨小姐一条龙服务