nodejs入门04__包的创建和发布

1.npm包的创建

Node.js 的包将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。Node.js 根据 CommonJS 规范实现了包机制,开发了 npm来解决包的发布和获取需求。

Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json。严格符合 CommonJS 规范的包应该具备以下特征:

(1)package.json 必须在包的顶层目录下;

(2)二进制文件应该在 bin 目录下;

(3)JavaScript 代码应该在 lib 目录下;

(4)文档应该在 doc 目录下;

(5)单元测试应该在 test 目录下。

Node.js 对包的要求并没有这么严格,只要顶层目录下有 package.json,并符合一些规范即可。当然为了提高兼容性,在制作包的时候还是建议严格遵守 CommonJS 规范。

1.1.作为文件夹的模块

模块与文件是一一对应的。文件不仅可以是 JavaScript 代码或二进制代码,还可以是一个文件夹。最简单的包,就是一个作为文件夹的模块。

创建一个叫somepackage的包:

somepackage/index.js:

exports.hello = function(){
	console.log('Hello');
}
然后再somepackage之外进行调用:

getpackage.js:

var somemodule = require('./somepackage');
somemodule.hello();
运行并输出:

PS D:\phpStudy\WWW\node> node .\getpackage.js
Hello
我们使用这种方法可以把文件夹封装为一个模块,即所谓的包。包通常是一些模块的集合,在模块的基础上提供了更高层的抽象,相当于提供了一些固定接口的函数库。

通过定制package.json,我们可以创建更复杂、更完善、更符合规范的包用于发布。

1.2.package.json

在somepackage文件夹下新建package.json文件:

{
	"main":"./lib/interface.js"
}
将index.js重命名为interface.js,放入lib文件夹下,再次运行外部的getpackage.js,同样能得到结果。


Node.js 在调用某个包时,会首先检查包中 package.json 文件的 main 字段,将其作为包的接口模块,如果 package.json 或 main 字段不存在,会尝试寻找 index.js 或 index.node 作为包的接口。

2.npm包的发布

创建名为mymodule的文件作为包发布路径,在该目录中运行npm init:

package name: (mymodule) mymodule001
version: (1.0.0) 0.0.1
description: A module for learning perpose
entry point: (index.js)
test command:
git repository:
keywords:
author: xcys
license: (ISC)
About to write to D:\phpStudy\WWW\node\mymodule\package.json:

{
  "name": "mymodule001",
  "version": "0.0.1",
  "description": "A module for learning perpose",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "xcys",
  "license": "ISC"
}


Is this ok? (yes)
PS D:\phpStudy\WWW\node\mymodule>
package name命名的时候尽量特殊一点,如果命名与已有的包名重复,发布包的时候会报错。

同样再在mymodule目录下新建一个index.js,写入包内容:

exports.hello = function(){
	console.log('Hello World!');
};
这样一个包就制作完成。

发布之前还需要一个账号,打开https://www.npmjs.com/signup注册一个自己的npm账号并激活。

回到mymodule文件夹发布包,使用 npm adduser 输入注册的用户名、密码、邮箱,等待账号创建完成。完成后可以使用 npm whoami 测验是否已经取得了账号。

PS D:\phpStudy\WWW\node\mymodule> npm adduser
Username: xcys
Password:
Email: (this IS public) 你注册npm的邮箱
Logged in as xcys on http://registry.npmjs.org/.
PS D:\phpStudy\WWW\node\mymodule> npm whoami
xcys
PS D:\phpStudy\WWW\node\mymodule>
运行npm publish发布包:

出现报错:

PS D:\phpStudy\WWW\node\mymodule> npm publish
npm ERR! publish Failed PUT 403
npm ERR! code E403
npm ERR! You do not have permission to publish "mymodule001". Are you logged in as the correct user? : mymodule001

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\ming\AppData\Roaming\npm-cache\_logs\2018-01-13T09_52_48_485Z-debug.log
PS D:\phpStudy\WWW\node\mymodule>
可能是包名与已有的包名重复,回到package.json文件,改成包名为mymodule0011,再次发布:

PS D:\phpStudy\WWW\node\mymodule> npm publish
+ mymodule0011@0.0.1

出现进度条之后发布成功。

其他报错:如果npm的安装镜像是国内的淘宝等其他镜像发布包的时候也会出现报错,需要改回http://registry.npmjs.org/镜像。

打开https://www.npmjs.com即可搜索到刚才发布的包mymodule0011:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值