node包详细开发过程

2017/7/30 posted in  Npm

上一篇文章讲解了如何开发和发布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
}

⚠️ 主要为了暴露接口


到此编码开发基本完毕
此时我们并不知道我们实现的功能是否可行、可用
我们需要进行单元测试

书写单元测试

手动测试

跑脚本自动测试

总结

  1. 配置node环境
  2. 使用npm初始化命令生成package.json(npm init)
  3. 创建工程环境:目录,入口文件等
  4. 编辑package添加第三方依赖包(如果需要)
  5. 根据package安装依赖包(npm install)
  6. 编写index.js开始实现功能...
  7. 完成功能之后测试
  8. 测试通过没有问题发包(npm publish)

整理大纲