2019独角兽企业重金招聘Python工程师标准>>>

托NPM和Nodejs的福,现在用javascript就可以快速编写命令行工具而不用浪费时间迷乱在c语法中.

~#gcc test.c

~#git add .

用javascript就可以写出类似的工具,NPM就是一个例子.

目标

我们想制作一个编译工具tool,当运行

~#tool test.js test2.js test3.js

会把文件合并并加上一些需要的功能.

Step 1

制作 tool tool/bin tool/bin/tool :

  • tool目录代表了整个工具模块

  • tool/bin/tool是命令运行文件

~# mkdir tool
~# cd tool
~tool# mkdir bin
~tool# cd bin
~tool/bin# vi tool

##Step 2

编辑 tool/bin/tool

#!/usr/bin/env nodevar node = process.argv[0];         // node命令
var tool = process.argv[1];         // tool文件
var args = process.argv.slice(2);   // 其他参数

***#!/usr/bin/env node***是必须的。在linux的脚本里,这条语句用来指定脚本的解释程序。这里指定使用***node***作为解释程序。

下面的语句则完全由***node***来解释了,终于不需要C那笨拙的语法了。

  • process: 全局模块,代表了当前进程

  • process.argv: 命令行输入的参数数组。 当运行~# tool test.js时,第一个是'node',第二个是'tool',第三个是'test.js',...

Step 3

建立 package.json :

  1. ~tool#npm init,输入模块信息.

  2. 在package.json中添加bin,在安装的时候,这一项会将***tool/bin/tool***文件复制到***/usr/local/bin/*** :

{"bin": {"tool": "./bin/tool"}
}

Step 4

编写个 Hello world! 来测试通信:

1 ) 编辑 tool/bin/tool

#!/usr/bin/env nodevar node = process.argv[0];
var tool = process.argv[1];
var file = process.argv[2];   if (file) { var child = require("child_process").spawn(node, [file]); child.stdout.on("data", function (data) {process.stdout.write(data);});
}console.log("start tool.");

获得如下tool工具:

tool|—— bin |     |—— tool|—— package.json

2 ) 编辑测试文件

~# vi test.js :

console.log('Hello world!');

3 ) 安装tool工具

~# npm install -g ./tool

4 ) 测试

~# tool test.js

如果没有错误,可以看到

start tool.
Hello world!

转载于:https://my.oschina.net/tulayang/blog/306630

使用NPM和Nodejs编写编译工具相关推荐

  1. NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略

    NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...

  2. jsc反编译工具编写探索之路

    对于经常做游戏安全逆向的读者来说,可能会经常遇到Cocos2dx编写的游戏.这个国产开源的游戏开发引擎支持多种编程语言进行游戏开发:发括主流的C/C++/JavaScript/Lua,之前,与大家讨论 ...

  3. php编写文件管理工具,php之markdown文档管理工具的实现代码

    本文主要和大家分享php之markdown文档管理工具的实现代码,希望能帮助到大家. 主要目标: 1.可以多人编辑 2.可以在浏览器中查看 3.有一个可以折叠的目录 4.支持多级目录 5.支持mark ...

  4. less及编译工具介绍

    什么是LESSCSS LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便CSS的编写和维护. LE ...

  5. 以太坊源码linux下如何编译,以太坊教程:搭建环境、编写编译一个智能合约

    本以太坊教程主要是介绍:搭建一个开发环境.编写编译一个智能合约. 以太坊是什么 以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台.通过其专用加密货币以太币(Ether)提供去中心化 ...

  6. add-apt-repository:找不到命令_手把手教你使用nodejs编写cli(命令行)

    手把手教你使用nodejs编写cli(命令行) 前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的c ...

  7. gyp linux,gyp编译工具

    最近用到了 node-gyp 这个工具, 是node 社区对 google gyp 编译工具的一个封装, 使用 node-gyp 工具可以用C++为node 项目编写 addon. 了解了一下 goo ...

  8. 了解 yarn 、npm、nodejs

    了解 yarn .npm.nodejs 一.前言 针对即将上线的 jeecg-boot 做一些准备. 二.了解系列 1.了解 nodejs Node.js 就是运行在服务端的 JavaScript.N ...

  9. nvm、npm、nodejs的关系

    1,nvm:nodeJs版本管理工具,管理nodejs版本和npm版本 2,node.js是javascript的一种运行环境,是对Google V8引擎进行的封装.是一个服务器端的javascrip ...

最新文章

  1. Windows server 2003 关于DNS的配置以及区域复制测试
  2. Latex:图片及子图排版
  3. 21-5-22校赛J 下围棋
  4. 手机号段对应地区编码_漫画:“哈夫曼编码” 是什么鬼?
  5. mysql主主备份及集群
  6. 计算机网络——OSI参考模型和TCP/IP协议
  7. POJ3163 King of Fighters 状压DP/费用流
  8. 面试题--------7、Files的常用方法
  9. 深入浅出JavaScript (四)DHTML
  10. 《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料
  11. Python提取视频帧图片
  12. 一辆智能小车,最初(时间为0)的位置为(0,0),我们想知道它最后的位置。小车以每小时10公里的速度向北移动(以北为y轴正向,以东为x轴正向)。小车会受到一系列依照时间戳记排序的命令,1表示“向左转”
  13. excel学习笔记(一)
  14. 拼多多是PHP还是java,应届程序员收到拼多多offer 表情瞬间爆发
  15. 计算机视觉与图形学-立体匹配专题-金字塔立体匹配网络
  16. Python NLP入门教程
  17. android电子英语词典背景介绍,实现基于Android的英文电子词典
  18. 输入框数据的初始化拼装
  19. mp3转wma格式转换器 mp3音频怎么转换wma格式
  20. param name=robot_description command= $(find xacro)/xacro --inorder ' $(arg model)' 到底什么意思

热门文章

  1. php实验cookie,PHP实验一、二(cookie和session)
  2. tcp 协议中发送窗口的大小应该是_面试必备--TCP协议中的窗口机制滑动窗口详解...
  3. pyqt与mysql例子_PyQt 连接MySql数据库,C++代码转Python3代码
  4. mysql随机查询多条记录表_MySQL 随机查询表中N条记录
  5. python `__bytes__`
  6. 数据结构之基于Java的顺序队列实现
  7. 网站如何和服务器匹配,匹配服务器
  8. es集群节点数和分片数关系_ES数据插入和查询流程是怎么样的?
  9. java订单类_使用Java创建一个订单类代码实例
  10. 如何报名腾讯云认证考试?