SlideShare ist ein Scribd-Unternehmen logo
1 von 28
NAE Client
用Node.js 编写shell script




    郑新林(剪巽)| @literal
NAE (Node App Engine)
NAE (Node App Engine)
NAE (Node App Engine)




                 NAE 在线编辑器

                 每个应用需要一个 package.json 文件

                 .naeignore 文件:控制同步时的排除文件
NAE (Node App Engine)




    NAE 上APP有两种模式 : Dev , Online

    在线编辑器操作的代码是dev模式下的代码

    dev调试之后,需要通过发布才能到online模式

    dev      : appname.dev.cnodejs.net
    online   : appname.cnodejs.net
NAE (Node App Engine)


为哈没有shell工具?

我不打算在浏览器里写代码XD !

我控shell !

我是姚明!
NAE Client (design)

作为一个client,我要提供哪些功能呢? (压力好大~)

    格式 :
           nae cmd appname
    cmd:
           auth
           start     [appname]
           stop      [appname]
           restart   [appname]
           debug     [appname]
           sdown     [appname]
           sup       [appname]
           pub       [appname]
           update
NAE Client (design)




                      通信:socket 问答式
                      协议:json head + binary body
NAE Client (design)




                      大洋葱文件传输

                      {cmd:file_add,app:xxx,v:’1.1’,length:123}
                      010101011010110101010100101011001
                      010101010100101010102
NAE Client (dev)
 寻找技术实现方案
 命令行运行       shell / npm package

 命令行参数获取
                npm install optimist

 命令行 用户输入
                                       npm install read


 socket 连接       require(“net”)

 文件操作            require(“fs”)
NAE Client (dev , v1)
 第一版: shell + node.js
 #!/bin/sh
 echo “[Enter Email]:”
 read email
 if [ ! –z $email ] ;then

 fi
 .....
 xxxx/nae.js argv1 argv2 ....

 #!/usr/bin/env node
 // javascript
 // write more , do more!

 $ ln path/nae /usr/local/bin/nae

 #!/bin/sh
 # TODO 安装、更新用的shell脚本
NAE Client (dev , v1)
 第一版 开试




 mocha 被上传了,咋整 ?


 需要一个控制同步到机制,.naeignore 出场 !!!
NAE Client (dev, v1 )




                        改进大洋葱
                        .naeignore 制定同步排除列表
                        node_module/mocha/*
                        node_module/xxxx/*
                        config.json

                        精简diff 列表,引入xfs模块
                        Mkdir xxx
                        Mkdir xxx/xxx => mkdir xxx/xxx

                        Rmdir xxx/xxx/
                        Rmdir xxx/     => rmdir xxx
NAE Client (dev, v1 )

 Nodeclub , 第一场考验,挂了~

 现象:5000k+的文件,sdown死活跑2000个左右挂掉,为什么?

 原因:EMFILE 已达到进程可同时打开的文件数上限
 结论:For循环遍历文件,获取文件索引,是不安全的,
 方案:改成队列! 20个并发

  PS 另外一个文件操作坑坑
 现象:formidle上传文件,fs.rename(),提示tmp文件不存在,为什么?

  原因:fs.rename () 无法跨磁盘移动文件,报错 文件不存在
  结论:给node提 issue(增加了EXDEV错误码)
  方案:修改tmp目录 | fs.writeStream()


  文件错误码说明:
  http://club.cnodejs.org/topic/4f181d70817ae4105c003b9c
NAE Client (dev , v1)

 兼容了
       linux/unix shell
       windows git-bash



  缺点
       安装像原先的 npm install
       更新比较麻烦,尤其是windows下
NAE Client (dev , v1)


还行吧

能用了,只是家里win7,没装虚拟机~

呃,什么? 容我想想~
NAE Client
 node v0.6.* 开始,npm开始强大起来


   npm对平台的支持变好;
   从 mocha,jake等模块中得到启发;

   于是开始收集资料,准备将client升级成 npm模块

   程序还没开始,先占坑 : nae
NAE Client (dev , v2)

 Npm 的使用
  $ cd your_module
  $ npm init                  # 初始化,按wizard一部一部

  {
          “name” : “nae”,
          “version” : “0.0.1”,
          “main” : “index.js”,
          “bin” : { “nae” : “bin/nae.js” },
          “engines” : “>0.6.6”,
          “author” : “NAE”,
          “description”: “nae client ,”,
          “dependencies” : {}
  }

  $ npm publish
NAE Client (dev , v2)

 捕获用户输入,替代shell的read

  $ npm install read

  var Read = require(‘read’);

  Read({prompt:”Enter Email”},function(err, user){
          Read({prompt:”Enter Password,
                  silent: true},function(err, user){
                  console.log(“密码明文,么加密~”)
          });
  });
NAE Client (dev , v2)

 处理OS平台差异
 获取用户目录,保存auth信息

  // *nix
  process.env[‘HOME’]
  // windows
  process.env[‘HOMEDRIVE’] + process.env[‘HOMEPATH’]


 文件路径 :  和 /

  filepath.replace(//g , ‘/’);
NAE Client (dev , v2)

 迁移完毕!

 除了异步写起来需要异步一下思路,其他很好

 可以和“难写”的shell script 说 byebye了

  $ npm publish


 呃,忘了改帮助文档了,又不想升版本号,咋办咋办?


  $ npm unpublish nae@0.0.1

  0.0.1版本就这么灰飞烟灭了~
NAE Client (inaugurate)



             $ npm install nae
                    亲,全国包邮
NAE Client (usage)

 开始使用NAE Client
 $ nae auth
 $ cd workspace
 $ nae sdown app1   # 下载app1,将会在workspace下建立app1/
 $ cd app1

 本地开发,编辑代码 (代码有版本库控制,更加)

 $ nae sup      ## 上传修改,有排除的文件,则修改.naeignore
 线上调试
 $ nae debug    ## 连接nae的dev模式,stdout,stderr将被返回,
                ## app重启,获得调试信息
 发布代码上线

 $ nae pub
NAE Client


这个可以有!

哈哈哈哈哈 !

囧死我了~
NAE Client (TODO)
 命令改进

 $ nae sdown   ## 本地目录名称 必须和 appname 相同 ?


 $ nae sup     ## sup、debug 能否组合?


 你的建议?
Node.js : the new shell script
 process         提供平台、进程的信息,以及进程的控制
 child_process   调用 shell 命令
 fs 、http、net    提供文件、网络支持

 模块 optimist 提供shell式的参数支持
 模块 read     提供输入交互
 模块 xfs增强文件操作
 模块 log4js   打印漂亮的输出信息
FAQ
Thank you


部分图片来自:
http://sinovision.net/news.php?act=details&news_id=82607
http://golang.org/doc/

Weitere ähnliche Inhalte

Was ist angesagt?

Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯liuts
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探仲昀 王
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用琛琳 饶
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用謝 宗穎
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Bo-Yi Wu
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & WindowsChu-Siang Lai
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训青帅 常
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧Chu-Siang Lai
 
1, shell intro
1, shell intro1, shell intro
1, shell introted-xu
 
Effective linux.2.(tools)
Effective linux.2.(tools)Effective linux.2.(tools)
Effective linux.2.(tools)wang hongjiang
 
OpenResty/Lua Practical Experience
OpenResty/Lua Practical ExperienceOpenResty/Lua Practical Experience
OpenResty/Lua Practical ExperienceHo Kim
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginnerazole Lai
 
开源Pass平台flynn功能简介
开源Pass平台flynn功能简介开源Pass平台flynn功能简介
开源Pass平台flynn功能简介Zhichao Liang
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介Zhichao Liang
 
智能Dns工作流程及配置
智能Dns工作流程及配置智能Dns工作流程及配置
智能Dns工作流程及配置Yiwei Ma
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)wang hongjiang
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-dockerBruce Huang
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出wang hongjiang
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Chu-Siang Lai
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 

Was ist angesagt? (20)

Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧
 
1, shell intro
1, shell intro1, shell intro
1, shell intro
 
Effective linux.2.(tools)
Effective linux.2.(tools)Effective linux.2.(tools)
Effective linux.2.(tools)
 
OpenResty/Lua Practical Experience
OpenResty/Lua Practical ExperienceOpenResty/Lua Practical Experience
OpenResty/Lua Practical Experience
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
 
开源Pass平台flynn功能简介
开源Pass平台flynn功能简介开源Pass平台flynn功能简介
开源Pass平台flynn功能简介
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介
 
智能Dns工作流程及配置
智能Dns工作流程及配置智能Dns工作流程及配置
智能Dns工作流程及配置
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-docker
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 

Ähnlich wie Nae client(using Node.js to create shell cmd)

Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Yiwei Ma
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
Noip2 stack buffer overflow
Noip2 stack buffer overflowNoip2 stack buffer overflow
Noip2 stack buffer overflowb0920075
 
Voldemort Intro Tangfl
Voldemort Intro TangflVoldemort Intro Tangfl
Voldemort Intro Tangflfulin tang
 
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)JoXuZi
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practicelitaocheng
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuMarsZ Chen
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)Timothy Chen
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍Tianwei Liu
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2致远 郑
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 
makefile20141121
makefile20141121makefile20141121
makefile20141121Kevin Wu
 
NCURSES Programming HOWTO
NCURSES Programming HOWTONCURSES Programming HOWTO
NCURSES Programming HOWTOeastsky
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中Andrew Wu
 
Oda安装 恢复步骤
Oda安装 恢复步骤Oda安装 恢复步骤
Oda安装 恢复步骤n-lauren
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkitLainZQ
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Gelis Wu
 
IoT開發平台NodeMCU
IoT開發平台NodeMCUIoT開發平台NodeMCU
IoT開發平台NodeMCU承翰 蔡
 

Ähnlich wie Nae client(using Node.js to create shell cmd) (20)

Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
Noip2 stack buffer overflow
Noip2 stack buffer overflowNoip2 stack buffer overflow
Noip2 stack buffer overflow
 
Voldemort Intro Tangfl
Voldemort Intro TangflVoldemort Intro Tangfl
Voldemort Intro Tangfl
 
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for Ubuntu
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
Make talk-cn
Make talk-cnMake talk-cn
Make talk-cn
 
makefile20141121
makefile20141121makefile20141121
makefile20141121
 
NCURSES Programming HOWTO
NCURSES Programming HOWTONCURSES Programming HOWTO
NCURSES Programming HOWTO
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
 
Oda安装 恢复步骤
Oda安装 恢复步骤Oda安装 恢复步骤
Oda安装 恢复步骤
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革
 
IoT開發平台NodeMCU
IoT開發平台NodeMCUIoT開發平台NodeMCU
IoT開發平台NodeMCU
 

Nae client(using Node.js to create shell cmd)

  • 1. NAE Client 用Node.js 编写shell script 郑新林(剪巽)| @literal
  • 2. NAE (Node App Engine)
  • 3. NAE (Node App Engine)
  • 4. NAE (Node App Engine) NAE 在线编辑器 每个应用需要一个 package.json 文件 .naeignore 文件:控制同步时的排除文件
  • 5. NAE (Node App Engine) NAE 上APP有两种模式 : Dev , Online 在线编辑器操作的代码是dev模式下的代码 dev调试之后,需要通过发布才能到online模式 dev : appname.dev.cnodejs.net online : appname.cnodejs.net
  • 6. NAE (Node App Engine) 为哈没有shell工具? 我不打算在浏览器里写代码XD ! 我控shell ! 我是姚明!
  • 7. NAE Client (design) 作为一个client,我要提供哪些功能呢? (压力好大~) 格式 : nae cmd appname cmd: auth start [appname] stop [appname] restart [appname] debug [appname] sdown [appname] sup [appname] pub [appname] update
  • 8. NAE Client (design) 通信:socket 问答式 协议:json head + binary body
  • 9. NAE Client (design) 大洋葱文件传输 {cmd:file_add,app:xxx,v:’1.1’,length:123} 010101011010110101010100101011001 010101010100101010102
  • 10. NAE Client (dev) 寻找技术实现方案 命令行运行 shell / npm package 命令行参数获取 npm install optimist 命令行 用户输入 npm install read socket 连接 require(“net”) 文件操作 require(“fs”)
  • 11. NAE Client (dev , v1) 第一版: shell + node.js #!/bin/sh echo “[Enter Email]:” read email if [ ! –z $email ] ;then fi ..... xxxx/nae.js argv1 argv2 .... #!/usr/bin/env node // javascript // write more , do more! $ ln path/nae /usr/local/bin/nae #!/bin/sh # TODO 安装、更新用的shell脚本
  • 12. NAE Client (dev , v1) 第一版 开试 mocha 被上传了,咋整 ? 需要一个控制同步到机制,.naeignore 出场 !!!
  • 13. NAE Client (dev, v1 ) 改进大洋葱 .naeignore 制定同步排除列表 node_module/mocha/* node_module/xxxx/* config.json 精简diff 列表,引入xfs模块 Mkdir xxx Mkdir xxx/xxx => mkdir xxx/xxx Rmdir xxx/xxx/ Rmdir xxx/ => rmdir xxx
  • 14. NAE Client (dev, v1 ) Nodeclub , 第一场考验,挂了~ 现象:5000k+的文件,sdown死活跑2000个左右挂掉,为什么? 原因:EMFILE 已达到进程可同时打开的文件数上限 结论:For循环遍历文件,获取文件索引,是不安全的, 方案:改成队列! 20个并发 PS 另外一个文件操作坑坑 现象:formidle上传文件,fs.rename(),提示tmp文件不存在,为什么? 原因:fs.rename () 无法跨磁盘移动文件,报错 文件不存在 结论:给node提 issue(增加了EXDEV错误码) 方案:修改tmp目录 | fs.writeStream() 文件错误码说明: http://club.cnodejs.org/topic/4f181d70817ae4105c003b9c
  • 15. NAE Client (dev , v1) 兼容了 linux/unix shell windows git-bash 缺点 安装像原先的 npm install 更新比较麻烦,尤其是windows下
  • 16. NAE Client (dev , v1) 还行吧 能用了,只是家里win7,没装虚拟机~ 呃,什么? 容我想想~
  • 17. NAE Client node v0.6.* 开始,npm开始强大起来 npm对平台的支持变好; 从 mocha,jake等模块中得到启发; 于是开始收集资料,准备将client升级成 npm模块 程序还没开始,先占坑 : nae
  • 18. NAE Client (dev , v2) Npm 的使用 $ cd your_module $ npm init # 初始化,按wizard一部一部 { “name” : “nae”, “version” : “0.0.1”, “main” : “index.js”, “bin” : { “nae” : “bin/nae.js” }, “engines” : “>0.6.6”, “author” : “NAE”, “description”: “nae client ,”, “dependencies” : {} } $ npm publish
  • 19. NAE Client (dev , v2) 捕获用户输入,替代shell的read $ npm install read var Read = require(‘read’); Read({prompt:”Enter Email”},function(err, user){ Read({prompt:”Enter Password, silent: true},function(err, user){ console.log(“密码明文,么加密~”) }); });
  • 20. NAE Client (dev , v2) 处理OS平台差异 获取用户目录,保存auth信息 // *nix process.env[‘HOME’] // windows process.env[‘HOMEDRIVE’] + process.env[‘HOMEPATH’] 文件路径 : 和 / filepath.replace(//g , ‘/’);
  • 21. NAE Client (dev , v2) 迁移完毕! 除了异步写起来需要异步一下思路,其他很好 可以和“难写”的shell script 说 byebye了 $ npm publish 呃,忘了改帮助文档了,又不想升版本号,咋办咋办? $ npm unpublish nae@0.0.1 0.0.1版本就这么灰飞烟灭了~
  • 22. NAE Client (inaugurate) $ npm install nae 亲,全国包邮
  • 23. NAE Client (usage) 开始使用NAE Client $ nae auth $ cd workspace $ nae sdown app1 # 下载app1,将会在workspace下建立app1/ $ cd app1 本地开发,编辑代码 (代码有版本库控制,更加) $ nae sup ## 上传修改,有排除的文件,则修改.naeignore 线上调试 $ nae debug ## 连接nae的dev模式,stdout,stderr将被返回, ## app重启,获得调试信息 发布代码上线 $ nae pub
  • 25. NAE Client (TODO) 命令改进 $ nae sdown ## 本地目录名称 必须和 appname 相同 ? $ nae sup ## sup、debug 能否组合? 你的建议?
  • 26. Node.js : the new shell script process 提供平台、进程的信息,以及进程的控制 child_process 调用 shell 命令 fs 、http、net 提供文件、网络支持 模块 optimist 提供shell式的参数支持 模块 read 提供输入交互 模块 xfs增强文件操作 模块 log4js 打印漂亮的输出信息
  • 27. FAQ