上一篇文章讲解了如何开发和发布node包的大体操作流程。
这篇是着重就如何编写代码来详细说明一下,好接下来直奔主题:
初始化工程环境
默认认为你的node环境已经没有问题。
npm init
如果使用了-f
(代表force)、-y
(代表yes),则跳过提问阶段,直接生成一个新的package.json
文件。
结果如下:
创建工程文件
mkdir tests lib && touch index.js README.md
工程结构如下:
开发功能
lib/utils.js
var Promise = require("es6-promise").Promise;
/**
* 提供各种工具方法
* @type {{*}}
*/
module.exports = {
/**
* 获取Defer对象
* @return {[type]} [description]
*/
getDefer: function (){
var deferred = {};
deferred.promise = new Promise(function(resolve, reject){
deferred.resolve = resolve;
deferred.reject = reject;
});
return deferred;
},
/**
* promise when方法
* @param promises promise数组
* @returns {[type]} [description]
*/
when: function(promises) {
var deffered = this.getDefer();
Promise.all(promises).then(function(data) {
deffered.resolve(data);
}, function(err) {
deffered.reject(err);
});
return deffered.promise;
}
}
⚠️ npm install es6-promise --save --verbos
lib/file.js
var fs = require('fs');
var path = require('path');
var utils = require('./utils.js');
module.exports = {
/**
* 写文件
* @param file 文件路径
* @param data 数据
*/
writeFile: function(file, data) {
var deferred = utils.getDefer();
file = path.resolve(file);
fs.writeFile(file, data, 'utf-8', function(err) {
if(err){
deferred.reject(err);
}else {
deferred.resolve(true);
}
});
return deferred.promise;
},
/**
* 读文件
* @param file 文件路径
*/
readFile: function(file) {
var deferred = utils.getDefer();
file = path.resolve(file);
fs.readFile(file, 'utf-8', function(err, data) {
if(err){
deferred.reject(err);
}else {
deferred.resolve(data);
}
});
return deferred.promise;
}
};
主函数index.js
'use strict';
var file = require('./lib/file.js');
module.exports = {
writeFile: file.writeFile,
readFile: file.readFile
}
⚠️ 主要为了暴露接口
到此编码开发基本完毕
此时我们并不知道我们实现的功能是否可行、可用
我们需要进行单元测试
书写单元测试
手动测试
跑脚本自动测试
总结
- 配置node环境
- 使用npm初始化命令生成package.json(npm init)
- 创建工程环境:目录,入口文件等
- 编辑package添加第三方依赖包(如果需要)
- 根据package安装依赖包(npm install)
- 编写index.js开始实现功能...
- 完成功能之后测试
- 测试通过没有问题发包(npm publish)