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? : mymodule001npm 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:

nodejs入门04__包的创建和发布相关推荐

  1. Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)

    目录 一.什么是包管理工具? 二.npm的使用 1.初始化 2.搜索包 3.下载安装包 4.安装包的使用 5.全局安装 6.安装包依赖 7.安装指定版本的包 8.删除依赖 9.配置命令别名 10.np ...

  2. node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》

    怎样创建,发布,升级你的npm,node模块 原文 node.js module(模块)是package的一种,能够发布到npm.从创建一个package.json文件开始来创建一个module. 使 ...

  3. nodejs 之npm包

    1.npm常见三个命令 项目初始化   npm  init       (注意:不要起中文名字) 安装包      npm install 包名   可以简写为 npm i 包名 引入包,使用 补充知 ...

  4. Gradle入门系列(4):创建二进制发布版本

    本文由 伯乐在线 - JustinWu 翻译.未经许可,禁止转载! 英文出处:petrikainulainen.欢迎加入翻译组. 在创建了一个实用的应用程序之后,我们可能想将其与他人分享.其中一种方式 ...

  5. nodejs入门_如何在NodeJS中使用套接字创建专业的Chat API解决方案[入门级]

    nodejs入门 Have you ever wondered how chat applications work behind the scenes? Well, today I am going ...

  6. 2万人同时访问 nodejs_面向前端工程师的Nodejs入门手册(一)

    前言 本文面向的读者已经是了解JavaScript基本使用的前端程序员,但是缺乏服务端的经验,接下来将带你走进在服务端的世界,看看运行在服务端的JavaScript是如何工作的,它与运行在浏览器端的J ...

  7. 万字肝完nodejs入门教程,详解入口,建议收藏(更新中)

    nodejs入门教程 1.前言 2.入门教程 2.1 命令行运行node.js脚本 2.2 退出node.js程序 2.3 如何使用 Node.js REPL 2.3.1 使用方式 2.3.2 点命令 ...

  8. npm包开发测试与发布

    NPM 包开发测试与发布 NPM 包开发测试与发布 引言 1. 开发步骤 1.1. 项目创建 1.2. 工具类功能实现 1.3. ts文件编译 2. npm包本地测试 2.1. 将npm包文件引入项目 ...

  9. nodejs入门教程之http的get和request简介及应用

    nodejs入门教程之http的get和request简介及应用 前言 上一篇文章,我介绍了nodejs的几个常用的模块及简单的案例,今天我们再来重点看一下nodejs的http模块,关于http模块 ...

最新文章

  1. 查询所有张姓同学学号6_只需简单几步 做出属于老师自己的专属成绩查询表格 方便家长查询...
  2. java音频库_Java是否为音频_synthesis_内置了库?
  3. docker d盘_windows修改docker的默认存放位置
  4. Putty的设置保存
  5. Creo二次开发--内存清理函数
  6. Qt Creator使用Git
  7. Spring IOC容器【p名称空间注入属性值 】
  8. python RandomTrees特征编码
  9. c语言写俄罗斯方块(源码)
  10. 杭电计算机考研复试经验
  11. Learning Instagram 学习Instagram Lynda课程中文字幕
  12. Java游戏开发中应始终坚持的10项基本原则
  13. Php 生成随机字符串函数集成
  14. 中国海洋大学计算机系实习报告,中国海洋大学海洋学实习报告.doc
  15. float转int 四舍五入问题
  16. Autocad2015点开闪退问题,线段等分
  17. 怎么把图片的分辨率调高?如何调整图片分辨率?
  18. 一键发送聊天话术软件,哪些工具可以一键发送话术
  19. 揭秘udesk智能质检:质检+分析双剑合璧
  20. Win10任务管理器不显示GPU的解决方法

热门文章

  1. 不越狱将ipa安装到iphone
  2. opencv-python:16_形态学处理【二】(开操作、闭操作、形态学梯度、顶帽变换、黑帽变换,去除皮肤镜中的毛发噪音、cv2.morphologyEx())
  3. 机器人中的数值优化之最速下降法
  4. android 的Zygote 分析
  5. Qt QImage类详解(QImage类型转换、QImage类函数及QImage像素操作)
  6. Py西游攻关之IO model
  7. LINUX IIO子系统分析之六 iio device的驱动开发流程说明
  8. bat创建桌面快捷方式,并用浏览器打开网页
  9. 最新大数据产业生态地图:十大爆发点,百大公司起底
  10. 代码分享 Python | 批量nc文件转tif