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? : 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__包的创建和发布相关推荐
- Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)
目录 一.什么是包管理工具? 二.npm的使用 1.初始化 2.搜索包 3.下载安装包 4.安装包的使用 5.全局安装 6.安装包依赖 7.安装指定版本的包 8.删除依赖 9.配置命令别名 10.np ...
- node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
怎样创建,发布,升级你的npm,node模块 原文 node.js module(模块)是package的一种,能够发布到npm.从创建一个package.json文件开始来创建一个module. 使 ...
- nodejs 之npm包
1.npm常见三个命令 项目初始化 npm init (注意:不要起中文名字) 安装包 npm install 包名 可以简写为 npm i 包名 引入包,使用 补充知 ...
- Gradle入门系列(4):创建二进制发布版本
本文由 伯乐在线 - JustinWu 翻译.未经许可,禁止转载! 英文出处:petrikainulainen.欢迎加入翻译组. 在创建了一个实用的应用程序之后,我们可能想将其与他人分享.其中一种方式 ...
- nodejs入门_如何在NodeJS中使用套接字创建专业的Chat API解决方案[入门级]
nodejs入门 Have you ever wondered how chat applications work behind the scenes? Well, today I am going ...
- 2万人同时访问 nodejs_面向前端工程师的Nodejs入门手册(一)
前言 本文面向的读者已经是了解JavaScript基本使用的前端程序员,但是缺乏服务端的经验,接下来将带你走进在服务端的世界,看看运行在服务端的JavaScript是如何工作的,它与运行在浏览器端的J ...
- 万字肝完nodejs入门教程,详解入口,建议收藏(更新中)
nodejs入门教程 1.前言 2.入门教程 2.1 命令行运行node.js脚本 2.2 退出node.js程序 2.3 如何使用 Node.js REPL 2.3.1 使用方式 2.3.2 点命令 ...
- npm包开发测试与发布
NPM 包开发测试与发布 NPM 包开发测试与发布 引言 1. 开发步骤 1.1. 项目创建 1.2. 工具类功能实现 1.3. ts文件编译 2. npm包本地测试 2.1. 将npm包文件引入项目 ...
- nodejs入门教程之http的get和request简介及应用
nodejs入门教程之http的get和request简介及应用 前言 上一篇文章,我介绍了nodejs的几个常用的模块及简单的案例,今天我们再来重点看一下nodejs的http模块,关于http模块 ...
最新文章
- 查询所有张姓同学学号6_只需简单几步 做出属于老师自己的专属成绩查询表格 方便家长查询...
- java音频库_Java是否为音频_synthesis_内置了库?
- docker d盘_windows修改docker的默认存放位置
- Putty的设置保存
- Creo二次开发--内存清理函数
- Qt Creator使用Git
- Spring IOC容器【p名称空间注入属性值 】
- python RandomTrees特征编码
- c语言写俄罗斯方块(源码)
- 杭电计算机考研复试经验
- Learning Instagram 学习Instagram Lynda课程中文字幕
- Java游戏开发中应始终坚持的10项基本原则
- Php 生成随机字符串函数集成
- 中国海洋大学计算机系实习报告,中国海洋大学海洋学实习报告.doc
- float转int 四舍五入问题
- Autocad2015点开闪退问题,线段等分
- 怎么把图片的分辨率调高?如何调整图片分辨率?
- 一键发送聊天话术软件,哪些工具可以一键发送话术
- 揭秘udesk智能质检:质检+分析双剑合璧
- Win10任务管理器不显示GPU的解决方法
热门文章
- 不越狱将ipa安装到iphone
- opencv-python:16_形态学处理【二】(开操作、闭操作、形态学梯度、顶帽变换、黑帽变换,去除皮肤镜中的毛发噪音、cv2.morphologyEx())
- 机器人中的数值优化之最速下降法
- android 的Zygote 分析
- Qt QImage类详解(QImage类型转换、QImage类函数及QImage像素操作)
- Py西游攻关之IO model
- LINUX IIO子系统分析之六 iio device的驱动开发流程说明
- bat创建桌面快捷方式,并用浏览器打开网页
- 最新大数据产业生态地图:十大爆发点,百大公司起底
- 代码分享 Python | 批量nc文件转tif