1 新建模块目录结构
album_mgr
--lib(文件夹)
--test(文件夹)
package.json
Readkme.md
2 编写package.json文件
{
"name": "album-manager",
"version": "1.0.0",
"main": "./lib/albums.js",//设置main启动文件
//"private": true
}
此文件至少要包含一个模块名name和main js文件,以便node可以从此文件加载模块。
如果node找不到package.json文件或没有指定main js文件,它会找index.js或者index.node来完成模块编译。
同时它会告诉npm模块名为album-manager,默认的启动js文件是albums.js其位于lib子目录下。
3 Readme.md(可选)
模块说明文档,github.com使用的标准文件格式。
4 编写核心js文件
编写albums.js 和 album.js放入lib目录下
albums.js
var fs = require('fs'),album = require('./album.js');
exports.version = "1.0.0";
exports.albums = function (root, callback) {...};
album.js
var path = require('path'),fs = require('fs');
function Album(album_path){
this.name = path.basename(album_path);
this.path = album_path;
}
Album.prototype.name = null;
Album.prototype.path = null;
Album.prototype._photos = null;
Album.prototype.photos = function(callback){...};
exports.create_album = function(path){
return new Album(path);
}
5 写个测试用例测下下
test.js
var amgr = require('./album_mgr');
amgr.albums('./',function(err,albums){
if(err){
console.log('unexpected error: ' + JSON.stringify(err));
return;
}
(function iterator(index){
if(index == albums.length){
console.log('Done');
return;
}
albums[index].photos(function(err,photos){
if(err){
console.log('Err loading albums: ' + JSON.stringify(err));
return;
}
console.log(albums[index].name);
console.log(photos);
console.log('');
iterator(index +1);
});
})(0);
})
node node\test.js
结果:
American
[]
China
[ 'CA Technologies.png',
'Caterpillar.jpg',
'Charter.jpg',
'chubb.png',
'Chunghwa Telecom.jpg',
'CIFIN.png',
'Citi.png',
'CMCC.jpg',
'Coca Cola.png' ]
Indian
[]
Done
6 本地部署模块
在package.json中加入"private": true告诉npm暂时还不会将module部署到npm库中。现在我们用npm link告诉npm在本地的默认库中放置一个link连接到album-manager包。
C:\Users\xxx\node\album_mgr>npm link
C:\Users\xxx\AppData\Roaming\npm\node_modules\album-manager -> C:\Users\xxx\node\album_mgr
7 使用模块
要使用上面部署的本地模块,还需要做两件事情
(1)在代码中要引用"album-manager"而不是"album_mgr",因为npm使用package.json中的name值
(2)为每个使用模块的project,用npm创建一个到album-manager模块的引用
C:\Users\xxx>mkdir test_project
C:\Users\xxx>cd test_project
C:\Users\xxx\test_project>npm link album-manager
C:\Users\xxx\node_modules\album-manager -> C:\Users\xxx\AppData\Roaming\npm\node_modules\album-manager -> C:\Users\xxx\node\album_mgr
C:\Users\xxx>dir node_modules
Volume in drive C has no label.
Volume Serial Number is 2CCD-F330
Directory of C:\Users\xxx\node_modules
07/07/2014 11:03 AM <DIR> .
07/07/2014 11:03 AM <DIR> ..
07/07/2014 11:03 AM <JUNCTION> album-manager [C:\Users\xxx\AppData\Roaming\npm\node_modules\album-manager]
06/24/2014 03:01 PM <DIR> formidable
0 File(s) 0 bytes
4 Dir(s) 5,949,730,816 bytes free
8 发布模块
如果我们想把编写的模块共享给其他人,我们可以用npm publish命令将它发布到官方的npm注册,要做的是
(1)移除package.json中private行
(2)用npm adduser在npm注册服务器上创建一个账号
(3)在模块目录中运行npm publish将其push到npm。
C:\Users\xxx>npm adduser
Username: myname
Password:
Email: (this IS public) xxx@163.com
C:\Users\xxx\node\album_mgr>npm publish
+ album-manager@1.0.0
如果我们想从npm注册那里取消发布也很简单
C:\Users\xxx\node\album_mgr>npm unpublish
npm ERR! Refusing to delete entire project.
npm ERR! Run with --force to do this.
npm ERR! npm unpublish <project>[@<version>]
npm ERR! not ok code 0
C:\Users\xxx\node\album_mgr>npm unpublish --force
npm WARN using --force I sure hope you know what you are doing.
- album-manager@1.0.0
用force强制取消发布。
分享到:
相关推荐
在这个“NodeJS C++,打印机模块源码”项目中,开发人员编写了一个C++模块,该模块被包装成NodeJS的addon,以便在NodeJS或Electron环境中使用。C++是底层系统编程的强大工具,能够直接访问操作系统的API,如Windows的...
Grunt 是一个 JavaScript 任务运行器,它允许开发者通过编写配置文件来自动化常见的构建任务,如编译 SASS/LESS 文件为 CSS、压缩 JavaScript 和 CSS、合并文件、自动刷新浏览器等。Grunt 使用 JSON 格式的配置文件...
在Node.js中,fs(file system)模块是用于进行文件和目录操作的核心模块。这个模块提供了丰富的API,允许开发者执行诸如读取、写入、删除、追加等操作。下面我们将详细探讨fs模块的使用方法。 首先,导入fs模块...
总结一下,这个`nodejs+mysql模块化实例代码`展示了如何在Node.js项目中通过模块化的方式来管理数据库操作。通过创建一个独立的`db.js`文件来封装连接逻辑,我们可以轻松地在多个模块中重用数据库连接,并且使用...
而文件模块则是用户自己编写的 JavaScript 文件,它们需要在运行时动态加载,虽然加载速度相对较慢,但灵活性更高,可以满足各种自定义需求。 在 Node.js 中创建自定义模块,你需要将常用功能封装到独立的 ...
2. **模块系统**:NodeJS使用CommonJS模块规范,通过`require`引入模块,`exports`或`module.exports`导出模块,便于代码组织和复用。 3. **V8引擎**:NodeJS的高性能得益于Google的V8引擎,它可以将JavaScript代码...
在Nodejs中写一个模块的流程:1 创建模块,也就是一个入口的js文件,里面加入一些特定的功能,teacher.js.2 导出模块,把这个功能和这个文件也就是这个模块名建立关系 exports.add = function() {}3 加载模块,在...
### Node.js 基于 WS 模块实现 WebSocket 聊天功能详解 #### 一、概述 在 Web 开发领域,实时通信是一项重要的技术需求。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许服务器端与客户端之间建立...
2. **自定义模块**:开发者自己编写的模块,可以是单个文件也可以是一组文件。自定义模块通常使用`module.exports`来导出公共接口。 #### 三、Node.js模块加载机制 理解Node.js模块如何加载对于编写高效的应用程序...
5. Stream模块:处理数据流,如读取文件、网络传输等,采用可读/可写流实现高效的数据处理。 三、NodeJS进阶特性 1. NPM(Node Package Manager):NodeJS的包管理器,用于安装、管理和共享第三方模块,是NodeJS...
为了更好地理解和使用这些模块,开发者需要深入阅读各自模块的官方文档,理解其API的细节,以及如何处理可能出现的异常和错误。 在此基础上,开发者还可以根据实际需求扩展更多的功能,例如写入不同格式的Excel文件...
NodeJS 中的模块使用 exports 对象来向外暴露成员,而 require 函数用来引入模块。exports 是一个对象,require 函数由 Node 提供,它返回的对象其实是 module 对象中的 exports 对象。 NodeJS 的应用非常广泛,...
nodejs的关于fs模块的编写,引入fs模块,修改文件内容。
本指南将深入探讨NodeJS的核心概念、开发工具、模块系统、网络编程以及常见的应用实践。 一、NodeJS基础 NodeJS的核心是事件驱动、非阻塞I/O模型,这使得它在处理高并发请求时表现优秀。其单线程执行和异步编程的...
这个版本的发布日期可能是在 2018 年,因为 NodeJS 的版本更新较为频繁,通常每个季度会发布一个主要版本。 在 NodeJS v8.11.3 中,包含了一些重要的改进和修复。例如,它可能包含了 V8 引擎的性能优化,提高了 ...
在JavaScript编程语言中,"random:nodejs 类中的模块 5"这个标题可能是指一个关于在Node.js环境中创建和使用自定义模块来生成随机数的示例。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在...
Node.js原生模块是通过C++或者其他低级语言编写的,它们可以提供比纯JavaScript更高的性能,特别是当处理系统级操作、I/O密集型任务或底层硬件交互时。本示例将探讨如何创建和使用一个Node.js原生模块,这对于理解和...
这份手册将涵盖NodeJS的基础概念、核心模块、网络编程、文件操作、模块化开发以及高级特性等多个方面。 1. **基础概念**:NodeJS的核心概念包括单线程模型、事件循环和回调函数。单线程意味着所有操作都在同一执行...
而文件模块则是用户自己编写的,需要在运行时动态加载,因此速度相对较慢,但灵活性更高。 CommonJS 规定了模块的创建和使用方式。在 Node.js 中,你可以将共享功能抽取到单独的 JavaScript 文件中,形成一个模块。...