0.1.3 • Published 8 years ago

global-node-moduel v0.1.3

Weekly downloads
1
License
MIT
Repository
github
Last release
8 years ago

global-node-moduel

usage

in code:

var GNM = require('global-node-moduel');
GNM.copySync('fixtures/test.txt', 'fixtures/test_copy.txt');

in command line:

global-node-moduel -c fixtures/test.txt -o fixtures/test_copy.txt

如何编写一个全局的Nodejs模块,只需两步。

第一步:package.json文件添加key:bin

"bin": {
  "global-node-moduel": "./bin/global-node-moduel.js"
}

上面的意思是,添加全局命令行执行命令:global-node-moduel,并且运行的node脚本文件是:./bin/global-node-moduel.js关于package.json 配置的说明,请看这里。

第二步:编写bin脚本(即本例子bin/global-node-moduel.js

#!/usr/bin/env node

var program = require('commander');
var pkg = require('../package.json');
var GM = require('../index');
var chalk = require('chalk');
var path = require('path');
program.version(pkg.version)
    .option('-c, --copy [path]', 'copy file sync')
    .option('-o, --output [path]', 'output file path')
    .option('-r, --remove [path]', 'remove file sync')
    .parse(process.argv);

init();
function init() {
    var copyPath = program.copy;
    var outputPath = program.output;
    var removePath = program.remove;
    var GMI = new GM();
    if (copyPath) {
        if (outputPath) {
            try{
                GMI.copySync(copyPath, outputPath);
                console.log(chalk.green.bold('copy file from ', path.resolve(copyPath), ' to ', path.resolve(outputPath)));
            } catch(e) {
                console.log(chalk.red.bold('[copySync ERROR]: '+ e.message));
            }
        } else {
            console.log(chalk.yellow.bold('[miss param output]'));
        }
        return; 
    } else if (removePath) {
        try{
            GMI.removeSync(removePath);
            console.log(chalk.green.bold('remove file from ', path.resolve(removePath)));
        } catch(e) {
            console.log(chalk.red.bold('[removeSync ERROR]: '+ e.message));
        }
        return;
    } else {
        console.log(chalk.blue.bold('[version]: ') + pkg.version);
        program.help();
    }
}

第一行#!/usr/bin/env node指该文件使用node脚本来执行(linux同学会很熟悉)。例子中主要引用commander模块,用来处理命令行的参数。关于commander的API请看这里

经过上面两个步骤,我们的全局可安装的Nodejs模块就编写完成了,下面会讲局部安装和全局安装的区别。

模块安装

  • 局部安装

    npm install global-node-moduel

    安装完成后会在当前node_modules目录下有一个.bin目录,.bin目录下有一个文件是global-node-moduel。看下图:

    局部安装

  • 全局安装

    npm install -g global-node-moduel //可能需要sudo权限

    安装完成后,我们可以通过which global-node-moduel命令查看安装的位置,假如是/usr/local/bin/global-node-moduel,然后再通过命令ls -l /usr/local/bin/global-node-moduel 查看可执行命令文件的真实位置:lrwxr-xr-x 1 root admin 64 7 26 01:21 /usr/local/bin/global-node-moduel -> ../lib/node_modules/global-node-moduel/bin/global-node-moduel.js ,也就是后面的 ../lib/node_modules/global-node-moduel/bin/global-node-moduel.js。由此看看出,全局安装的模块会在/usr/local/bin/目录(不同系统目录可能不一样,但原理是一样的)下创建一个软件,链接到bin的同层目录lib/node_modules/global-node-moduel/bin/global-node-moduel.js,也就是说实际上全局安装的模块是位于目录/usr/local/lib/node_modules/下(不同系统目录可能不一样)。看下图:

    全局安装

package.json配置说明

commander API 文档说明

关于命令行开发,可参考Node.js 命令行程序开发教程

0.1.3

8 years ago

0.1.2

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago

0.0.0

8 years ago