首先Phonegap是一个利用HTML5去开发App的框架。可以支持移动、PC等移动操作系统,是一个跨平台的应用,比较节省成本,缩短开发时间。性能不如专门的原生的好,做一些简单应用可以使用;
PhoneGap官网:http://phonegap.com
在Mac下安装Phonegap环境需要一些第三方软件。如Git,XCode,Node.js等等。
1.安装Git,可以参考教程如下:
http://www.git-scm.com/
2.安装Node.js参考如下:
http://nodejs.org/ (如果你安装了旧版本的需要手动安装npm,不过最新版的自带了)
3.进入终端命令行使用npm安装cordova如下,这个过程可能需要等待一下:
$ sudo npm install -g cordova
安装完成之后如下,由于内容太多,做了部分删减:
ChenfydeMBP:~ Chenfy$ npm -v
3.8.9
ChenfydeMBP:~ Chenfy$ sudo npm install -g cordova
Password:
fetchMetadata → network ▀ ╢███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╟
npm WARN deprecated node-uuid@1.4.7: use uuid module instead
/usr/local/bin/cordova -> /usr/local/lib/node_modules/cordova/bin/cordova
/usr/local/lib
└─┬ cordova@6.4.0
├─┬ cordova-common@1.5.1
│ ├── ansi@0.3.1
│ ├─┬ bplist-parser@0.1.1
│ │ └── big-integer@1.6.17
│ ├── cordova-registry-mapper@1.1.15
│ ├─┬ elementtree@0.1.6
│ │ └── sax@0.3.5
├─┬ repeating@1.1.3
│ └─┬ is-finite@1.0.2
│ └── number-is-nan@1.0.1
├── semver-diff@2.1.0
└── string-length@1.0.1
ChenfydeMBP:~ Chenfy$
4、进入你要创建的项目目录,然后创建phonegap项目。
$ cordova create hello com.example.hello hello
//输入完这个命令后cordova程序会帮你创建hello文件夹,里面就是这个phonegap环境了。
//第一个hello 项目的目录名称
//第二个hello 项目名称
5、创建xcode项目文件,这是在Mac平台开发,每个开发者都应该有自己的Xcode。
$ cd hello
$ cordova platform add ios
//之后你用finder进入子目录就会看到platforms中得ios文件夹,接着你就运行里面项目编译即可。
//这个过程有时也会有些慢,可能需要等待一下;
执行完这些效果如下:
ChenfydeMBP:hello Chenfy$ cordova platform add ios
Adding ios project...
Creating Cordova project for the iOS platform:
Path: platforms/ios
Package: com.example.hello
Name: HelloWorld
iOS project created with cordova-ios@4.3.1
Discovered plugin "cordova-plugin-whitelist" in config.xml. Adding it to the project
Fetching plugin "cordova-plugin-whitelist@1" via npm
Installing "cordova-plugin-whitelist" for ios
6、环境有了,接下来先说下如何与系统自身打交道;目前提供的一些功能还是比较有限的,比如摄像头、系统信息、文件操作等等,或者第三方的插件还未知如何集成(后续完成)。
如果要开始开发,需要自己加入一些插件;如果使用PhoneGap客户端的话,创建一个工程,他会帮你引入所有相关的plugin(插件);
添加插件命令 cordova plugin add *
设备信息插件:
cordova plugin add org.apache.cordova.device
网络连接插件:
cordova plugin add org.apache.cordova.network-information
cordova plugin add org.apache.cordova.battery-status
陀螺仪:
cordova plugin add org.apache.cordova.device-motion
cordova plugin add org.apache.cordova.device-orientation
cordova plugin add org.apache.cordova.geolocation
摄像头拍照录制等:
cordova plugin add org.apache.cordova.camera
cordova plugin add org.apache.cordova.media-capture
cordova plugin add org.apache.cordova.media
访问文件:
cordova plugin add org.apache.cordova.file
cordova plugin add org.apache.cordova.file-transfer
提醒:
cordova plugin add org.apache.cordova.dialogs
cordova plugin add org.apache.cordova.vibration
联系人:
cordova plugin add org.apache.cordova.contacts
全球化:
cordova plugin add org.apache.cordova.globalization
闪屏(启动画面):
cordova plugin add org.apache.cordova.splashscreen
打开新的浏览器 (InAppBrowser):
cordova plugin add org.apache.cordova.inappbrowser
调试主控制台:
cordova plugin add org.apache.cordova.console
//Old method
cordova plugin add org.chromium.zip
//New method
cordova plugin add cordova-plugin-zip
##- Try this:
cordova plugin add https://github.com/MobileChromeApps/cordova-plugin-zip.git
##- Or this:
cordova plugin add https://github.com/MobileChromeApps/cordova-plugin-zip
cordova的安装效果:
ChenfydeMBP:~ Chenfy$ sudo npm install -g cordova
Password:
fetchMetadata → network ▀ ╢███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╟
npm WARN deprecated node-uuid@1.4.7: use uuid module instead
/usr/local/bin/cordova -> /usr/local/lib/node_modules/cordova/bin/cordova
/usr/local/lib
└─┬ cordova@6.4.0
├─┬ cordova-common@1.5.1
│ ├── ansi@0.3.1
│ ├─┬ bplist-parser@0.1.1
│ │ └── big-integer@1.6.17
│ ├── cordova-registry-mapper@1.1.15
│ ├─┬ elementtree@0.1.6
│ │ └── sax@0.3.5
│ ├─┬ glob@5.0.15
│ │ ├─┬ inflight@1.0.6
│ │ │ └── wrappy@1.0.2
│ │ ├── inherits@2.0.3
│ │ ├── once@1.4.0
│ │ └── path-is-absolute@1.0.1
│ ├─┬ minimatch@3.0.3
│ │ └─┬ brace-expansion@1.1.6
│ │ ├── balanced-match@0.4.2
-map@0.0.1
│ ├─┬ osenv@0.1.4
│ │ ├── os-homedir@1.0.2
│ │ └── os-tmpdir@1.0.2
│ ├─┬ plist@1.2.0
│ │ ├── base64-js@0.0.8
│ │ ├── util-deprecate@1.0.2
│ │ ├── xmlbuilder@4.0.0
│ │ └── xmldom@0.1.27
│ ├── q@1.4.1
│ ├── semver@5.3.0
│ ├── shelljs@0.5.3
│ ├── underscore@1.8.3
│ └── unorm@1.4.1
├─┬ cordova-lib@6.4.0
│ ├─┬ aliasify@1.9.0
│ │ └─┬ browserify-transform-tools@1.5.3
│ │ └─┬ falafel@1.2.0
│ │ ├── acorn@1.2.2
│ │ ├── foreach@2.0.5
│ │ ├── isarray@0.0.1
│ │ └── object-keys@1.0.11
│ ├─┬ cordova-create@1.0.1
│ │ ├── cordova-app-hello-world@3.11.0
│ │ └── shelljs@0.3.0
│ ├─┬ cordova-fetch@1.0.1
│ │ ├─┬ dependency-ls@1.0.0
│ │ │ └── q@1.4.1
│ │ ├── is-url@1.2.2
│ │ ├── q@1.4.1
│ │ └─┬ shelljs@0.7.5
│ │ ├─┬ glob@7.1.1
│ │ │ └── fs.realpath@1.0.0
│ │ ├── interpret@1.0.1
│ │ └── rechoir@0.6.2
│ ├─┬ cordova-js@4.2.0
│ │ └─┬ browserify@13.1.0
│ │ ├── assert@1.3.0
│ │ ├─┬ browser-pack@6.0.2
│ │ │ ├─┬ combine-source-map@0.7.2
│ │ │ │ ├── convert-source-map@1.1.3
│ │ │ │ ├── inline-source-map@0.6.2
│ │ │ │ ├── lodash.memoize@3.0.4
│ │ │ │ └── source-map@0.5.6
│ │ │ └── umd@3.0.1
│ │ ├─┬ browser-resolve@1.11.2
│ │ │ └── resolve@1.1.7
│ │ ├─┬ browserify-zlib@0.1.4
│ │ │ └── pako@0.2.9
│ │ ├─┬ buffer@4.9.1
│ │ │ ├── base64-js@1.2.0
│ │ │ ├── ieee754@1.1.8
│ │ │ └── isarray@1.0.0
│ │ ├─┬ concat-stream@1.5.2
│ │ │ ├─┬ readable-stream@2.0.6
│ │ │ │ └── isarray@1.0.0
│ │ │ └── typedarray@0.0.6
│ │ ├─┬ console-browserify@1.1.0
│ │ │ └── date-now@0.1.4
│ │ ├── constants-browserify@1.0.0
│ │ ├─┬ crypto-browserify@3.11.0
│ │ │ ├─┬ browserify-cipher@1.0.0
│ │ │ │ ├─┬ browserify-aes@1.0.6
│ │ │ │ │ └── buffer-xor@1.0.3
│ │ │ │ ├─┬ browserify-des@1.0.0
│ │ │ │ │ └─┬ des.js@1.0.0
│ │ │ │ │ └── minimalistic-assert@1.0.0
│ │ │ │ └── evp_bytestokey@1.0.0
│ │ │ ├─┬ browserify-sign@4.0.0
│ │ │ │ ├── bn.js@4.11.6
│ │ │ │ ├── browserify-rsa@4.0.1
│ │ │ │ ├─┬ elliptic@6.3.2
│ │ │ │ │ ├── brorand@1.0.6
│ │ │ │ │ └── hash.js@1.0.3
│ │ │ │ └─┬ parse-asn1@5.0.0
│ │ │ │ └── asn1.js@4.9.0
│ │ │ ├── create-ecdh@4.0.0
│ │ │ ├─┬ create-hash@1.1.2
│ │ │ │ ├── cipher-base@1.0.3
│ │ │ │ └── ripemd160@1.0.1
│ │ │ ├── create-hmac@1.1.4
│ │ │ ├─┬ diffie-hellman@5.0.2
│ │ │ │ └── miller-rabin@4.0.0
│ │ │ ├── pbkdf2@3.0.9
│ │ │ ├── public-encrypt@4.0.0
│ │ │ └── randombytes@2.0.3
│ │ ├── defined@1.0.0
│ │ ├── deps-sort@2.0.0
│ │ ├── domain-browser@1.1.7
│ │ ├── duplexer2@0.1.4
│ │ ├── events@1.1.1
│ │ ├─┬ has@1.0.1
│ │ │ └── function-bind@1.1.0
│ │ ├── htmlescape@1.1.1
│ │ ├── https-browserify@0.0.1
│ │ ├─┬ insert-module-globals@7.0.1
│ │ │ ├── is-buffer@1.1.4
│ │ │ └─┬ lexical-scope@1.2.0
│ │ │ └── astw@2.0.0
│ │ ├─┬ JSONStream@1.3.0
│ │ │ └── jsonparse@1.2.0
│ │ ├─┬ labeled-stream-splicer@2.0.0
│ │ │ └── stream-splicer@2.0.0
│ │ ├─┬ module-deps@4.0.8
│ │ │ ├── cached-path-relative@1.0.0
│ │ │ ├─┬ detective@4.3.2
│ │ │ │ └── acorn@3.3.0
│ │ │ └── stream-combiner2@1.1.1
│ │ ├── os-browserify@0.1.2
│ │ ├─┬ parents@1.0.1
│ │ │ └── path-platform@0.11.15
│ │ ├── path-browserify@0.0.0
│ │ ├── process@0.11.9
│ │ ├── querystring-es3@0.2.1
│ │ ├── read-only-stream@2.0.0
│ │ ├─┬ readable-stream@2.2.2
│ │ │ ├── buffer-shims@1.0.0
│ │ │ ├── core-util-is@1.0.2
│ │ │ ├── isarray@1.0.0
│ │ │ └── process-nextick-args@1.0.7
│ │ ├── resolve@1.2.0
│ │ ├─┬ shasum@1.0.2
│ │ │ ├── json-stable-stringify@0.0.1
│ │ │ └── sha.js@2.4.8
│ │ ├─┬ shell-quote@1.6.1
│ │ │ ├── array-filter@0.0.1
│ │ │ ├── array-map@0.0.0
│ │ │ ├── array-reduce@0.0.0
│ │ │ └── jsonify@0.0.0
│ │ ├── stream-browserify@2.0.1
│ │ ├─┬ stream-http@2.5.0
│ │ │ ├── builtin-status-codes@2.0.0
│ │ │ └── to-arraybuffer@1.0.1
│ │ ├── string_decoder@0.10.31
│ │ ├── subarg@1.0.0
│ │ ├─┬ syntax-error@1.1.6
│ │ │ └── acorn@2.7.0
│ │ ├── through2@2.0.3
│ │ ├── timers-browserify@1.4.2
│ │ ├── tty-browserify@0.0.0
│ │ ├─┬ url@0.11.0
│ │ │ ├── punycode@1.3.2
│ │ │ └── querystring@0.2.0
│ │ ├─┬ util@0.10.3
│ │ │ └── inherits@2.0.1
│ │ ├─┬ vm-browserify@0.0.4
│ │ │ └── indexof@0.0.1
│ │ └── xtend@4.0.1
│ ├─┬ cordova-serve@1.0.0
│ │ ├─┬ compression@1.6.2
│ │ │ ├─┬ accepts@1.3.3
│ │ │ │ └── negotiator@0.6.1
│ │ │ ├── bytes@2.3.0
│ │ │ ├── compressible@2.0.9
│ │ │ ├─┬ debug@2.2.0
│ │ │ │ └── ms@0.7.1
│ │ │ ├── on-headers@1.0.1
│ │ │ └── vary@1.1.0
│ │ ├─┬ express@4.14.0
│ │ │ ├── array-flatten@1.1.1
│ │ │ ├── content-disposition@0.5.1
│ │ │ ├── content-type@1.0.2
│ │ │ ├── cookie@0.3.1
│ │ │ ├── cookie-signature@1.0.6
│ │ │ ├── depd@1.1.0
│ │ │ ├── encodeurl@1.0.1
│ │ │ ├── escape-html@1.0.3
│ │ │ ├── etag@1.7.0
│ │ │ ├─┬ finalhandler@0.5.0
│ │ │ │ ├── statuses@1.3.1
│ │ │ │ └── unpipe@1.0.0
│ │ │ ├── fresh@0.3.0
│ │ │ ├── merge-descriptors@1.0.1
│ │ │ ├── methods@1.1.2
│ │ │ ├─┬ on-finished@2.3.0
│ │ │ │ └── ee-first@1.1.1
│ │ │ ├── parseurl@1.3.1
│ │ │ ├── path-to-regexp@0.1.7
│ │ │ ├─┬ proxy-addr@1.1.2
│ │ │ │ ├── forwarded@0.1.0
│ │ │ │ └── ipaddr.js@1.1.1
│ │ │ ├── qs@6.2.0
│ │ │ ├── range-parser@1.2.0
│ │ │ ├─┬ send@0.14.1
│ │ │ │ ├── destroy@1.0.4
│ │ │ │ ├─┬ http-errors@1.5.1
│ │ │ │ │ └── setprototypeof@1.0.2
│ │ │ │ └── mime@1.3.4
│ │ │ ├── serve-static@1.11.1
│ │ │ ├─┬ type-is@1.6.14
│ │ │ │ └── media-typer@0.3.0
│ │ │ └── utils-merge@1.0.0
│ │ └── q@1.4.1
│ ├─┬ dep-graph@1.1.0
│ │ └── underscore@1.2.1
│ ├─┬ init-package-json@1.9.4
│ │ ├── glob@6.0.4
│ │ ├─┬ npm-package-arg@4.2.0
│ │ │ └── hosted-git-info@2.1.5
│ │ ├── promzard@0.3.0
│ │ ├─┬ read@1.0.7
│ │ │ └── mute-stream@0.0.6
│ │ ├─┬ read-package-json@2.0.4
│ │ │ ├── glob@6.0.4
│ │ │ ├─┬ json-parse-helpfulerror@1.0.3
│ │ │ │ └── jju@1.3.0
│ │ │ └─┬ normalize-package-data@2.3.5
│ │ │ └─┬ is-builtin-module@1.0.0
│ │ │ └── builtin-modules@1.1.1
│ │ ├─┬ validate-npm-package-license@3.0.1
│ │ │ ├─┬ spdx-correct@1.0.2
│ │ │ │ └── spdx-license-ids@1.2.2
│ │ │ └── spdx-expression-parse@1.0.4
│ │ └─┬ validate-npm-package-name@2.2.2
│ │ └── builtins@0.0.7
│ ├── nopt@3.0.6
│ ├─┬ npm@2.15.11
│ │ ├── abbrev@1.0.9
│ │ ├── ansi@0.3.1
│ │ ├── ansi-regex@2.0.0
│ │ ├── ansicolors@0.3.2
│ │ ├── ansistyles@0.1.3
│ │ ├── archy@1.0.0
│ │ ├── async-some@1.0.2
│ │ ├── block-stream@0.0.9
│ │ ├── char-spinner@1.0.1
│ │ ├── chmodr@1.0.2
│ │ ├── chownr@1.0.1
│ │ ├── cmd-shim@2.0.2
│ │ ├─┬ columnify@1.5.4
│ │ │ └─┬ wcwidth@1.0.0
│ │ │ └─┬ defaults@1.0.3
│ │ │ └── clone@1.0.2
│ │ ├─┬ config-chain@1.1.10
│ │ │ └── proto-list@1.2.4
│ │ ├─┬ dezalgo@1.0.3
│ │ │ └── asap@2.0.3
│ │ ├── editor@1.0.0
│ │ ├── fs-vacuum@1.2.9
│ │ ├─┬ fs-write-stream-atomic@1.0.8
│ │ │ └── iferr@0.1.5
│ │ ├── fstream@1.0.10
│ │ ├─┬ fstream-npm@1.1.1
│ │ │ └── fstream-ignore@1.0.5
│ │ ├── github-url-from-git@1.4.0
│ │ ├── github-url-from-username-repo@1.0.2
│ │ ├─┬ glob@7.0.6
│ │ │ ├── fs.realpath@1.0.0
│ │ │ └── path-is-absolute@1.0.0
│ │ ├── graceful-fs@4.1.6
│ │ ├── hosted-git-info@2.1.5
│ │ ├── imurmurhash@0.1.4
│ │ ├── inflight@1.0.5
│ │ ├── inherits@2.0.3
│ │ ├── ini@1.3.4
│ │ ├─┬ init-package-json@1.9.4
│ │ │ ├─┬ glob@6.0.4
│ │ │ │ └── path-is-absolute@1.0.0
│ │ │ └── promzard@0.3.0
│ │ ├── lockfile@1.0.1
│ │ ├─┬ lru-cache@4.0.1
│ │ │ ├── pseudomap@1.0.2
│ │ │ └── yallist@2.0.0
│ │ ├─┬ minimatch@3.0.3
│ │ │ └─┬ brace-expansion@1.1.6
│ │ │ ├── balanced-match@0.4.2
│ │ │ └── concat-map@0.0.1
│ │ ├─┬ mkdirp@0.5.1
│ │ │ └── minimist@0.0.8
│ │ ├─┬ node-gyp@3.4.0
│ │ │ └─┬ path-array@1.0.1
│ │ │ └─┬ array-index@1.0.0
│ │ │ ├─┬ debug@2.2.0
│ │ │ │ └── ms@0.7.1
│ │ │ └─┬ es6-symbol@3.1.0
│ │ │ ├── d@0.1.1
│ │ │ └─┬ es5-ext@0.10.12
│ │ │ └── es6-iterator@2.0.0
│ │ ├── nopt@3.0.6
│ │ ├── normalize-git-url@3.0.2
│ │ ├─┬ normalize-package-data@2.3.5
│ │ │ └─┬ is-builtin-module@1.0.0
│ │ │ └── builtin-modules@1.1.0
│ │ ├── npm-cache-filename@1.0.2
│ │ ├── npm-install-checks@1.0.7
│ │ ├── npm-package-arg@4.1.0
│ │ ├─┬ npm-registry-client@7.2.1
│ │ │ ├─┬ concat-stream@1.5.2
│ │ │ │ ├─┬ readable-stream@2.0.6
│ │ │ │ │ ├── core-util-is@1.0.2
│ │ │ │ │ ├── isarray@1.0.0
│ │ │ │ │ ├── process-nextick-args@1.0.7
│ │ │ │ │ ├── string_decoder@0.10.31
│ │ │ │ │ └── util-deprecate@1.0.2
│ │ │ │ └── typedarray@0.0.6
│ │ │ └── retry@0.10.0
│ │ ├── npm-user-validate@0.1.5
│ │ ├─┬ npmlog@2.0.4
│ │ │ ├─┬ are-we-there-yet@1.1.2
│ │ │ │ └── delegates@1.0.0
│ │ │ └─┬ gauge@1.2.7
│ │ │ ├── has-unicode@2.0.0
│ │ │ ├─┬ lodash.pad@4.4.0
│ │ │ │ ├── lodash._baseslice@4.0.0
│ │ │ │ ├── lodash._basetostring@4.12.0
│ │ │ │ └── lodash.tostring@4.1.4
│ │ │ ├── lodash.padend@4.5.0
│ │ │ └── lodash.padstart@4.5.0
│ │ ├── once@1.4.0
│ │ ├── opener@1.4.1
│ │ ├─┬ osenv@0.1.3
│ │ │ ├── os-homedir@1.0.0
│ │ │ └── os-tmpdir@1.0.1
│ │ ├── path-is-inside@1.0.1
│ │ ├─┬ read@1.0.7
│ │ │ └── mute-stream@0.0.5
│ │ ├─┬ read-installed@4.0.3
│ │ │ ├── debuglog@1.0.1
│ │ │ ├── readdir-scoped-modules@1.0.2
│ │ │ └── util-extend@1.0.1
│ │ ├─┬ read-package-json@2.0.4
│ │ │ ├─┬ glob@6.0.4
│ │ │ │ └── path-is-absolute@1.0.0
│ │ │ └─┬ json-parse-helpfulerror@1.0.3
│ │ │ └── jju@1.3.0
│ │ ├─┬ readable-stream@2.1.5
│ │ │ ├── buffer-shims@1.0.0
│ │ │ ├── core-util-is@1.0.2
│ │ │ ├── isarray@1.0.0
│ │ │ ├── process-nextick-args@1.0.7
│ │ │ ├── string_decoder@0.10.31
│ │ │ └── util-deprecate@1.0.2
│ │ ├── realize-package-specifier@3.0.1
│ │ ├─┬ request@2.74.0
│ │ │ ├── aws-sign2@0.6.0
│ │ │ ├── aws4@1.4.1
│ │ │ ├─┬ bl@1.1.2
│ │ │ │ └─┬ readable-stream@2.0.6
│ │ │ │ ├── core-util-is@1.0.2
│ │ │ │ ├── isarray@1.0.0
│ │ │ │ ├── process-nextick-args@1.0.7
│ │ │ │ ├── string_decoder@0.10.31
│ │ │ │ └── util-deprecate@1.0.2
│ │ │ ├── caseless@0.11.0
│ │ │ ├─┬ combined-stream@1.0.5
│ │ │ │ └── delayed-stream@1.0.0
│ │ │ ├── extend@3.0.0
│ │ │ ├── forever-agent@0.6.1
│ │ │ ├─┬ form-data@1.0.0-rc4
│ │ │ │ └── async@1.5.2
│ │ │ ├─┬ har-validator@2.0.6
│ │ │ │ ├─┬ chalk@1.1.3
│ │ │ │ │ ├── ansi-styles@2.2.1
│ │ │ │ │ ├── escape-string-regexp@1.0.5
│ │ │ │ │ ├── has-ansi@2.0.0
│ │ │ │ │ └── supports-color@2.0.0
│ │ │ │ ├─┬ commander@2.9.0
│ │ │ │ │ └── graceful-readlink@1.0.1
│ │ │ │ ├─┬ is-my-json-valid@2.13.1
│ │ │ │ │ ├── generate-function@2.0.0
│ │ │ │ │ ├─┬ generate-object-property@1.2.0
│ │ │ │ │ │ └── is-property@1.0.2
│ │ │ │ │ ├── jsonpointer@2.0.0
│ │ │ │ │ └── xtend@4.0.1
│ │ │ │ └─┬ pinkie-promise@2.0.1
│ │ │ │ └── pinkie@2.0.4
│ │ │ ├─┬ hawk@3.1.3
│ │ │ │ ├── boom@2.10.1
│ │ │ │ ├── cryptiles@2.0.5
│ │ │ │ ├── hoek@2.16.3
│ │ │ │ └── sntp@1.0.9
│ │ │ ├─┬ http-signature@1.1.1
│ │ │ │ ├── assert-plus@0.2.0
│ │ │ │ ├─┬ jsprim@1.3.0
│ │ │ │ │ ├── extsprintf@1.0.2
│ │ │ │ │ ├── json-schema@0.2.2
│ │ │ │ │ └── verror@1.3.6
│ │ │ │ └─┬ sshpk@1.9.2
│ │ │ │ ├── asn1@0.2.3
│ │ │ │ ├── assert-plus@1.0.0
│ │ │ │ ├── dashdash@1.14.0
│ │ │ │ ├── ecc-jsbn@0.1.1
│ │ │ │ ├── getpass@0.1.6
│ │ │ │ ├── jodid25519@1.0.2
│ │ │ │ ├── jsbn@0.1.0
│ │ │ │ └── tweetnacl@0.13.3
│ │ │ ├── is-typedarray@1.0.0
│ │ │ ├── isstream@0.1.2
│ │ │ ├── json-stringify-safe@5.0.1
│ │ │ ├─┬ mime-types@2.1.11
│ │ │ │ └── mime-db@1.23.0
│ │ │ ├── node-uuid@1.4.7
│ │ │ ├── oauth-sign@0.8.2
│ │ │ ├── qs@6.2.1
│ │ │ ├── stringstream@0.0.5
│ │ │ ├── tough-cookie@2.3.1
│ │ │ └── tunnel-agent@0.4.3
│ │ ├── retry@0.10.0
│ │ ├── rimraf@2.5.4
│ │ ├── semver@5.1.0
│ │ ├─┬ sha@2.0.1
│ │ │ └─┬ readable-stream@2.0.2
│ │ │ ├── core-util-is@1.0.1
│ │ │ ├── isarray@0.0.1
│ │ │ ├── process-nextick-args@1.0.3
│ │ │ ├── string_decoder@0.10.31
│ │ │ └── util-deprecate@1.0.1
│ │ ├── slide@1.1.6
│ │ ├── sorted-object@2.0.0
│ │ ├── spdx-license-ids@1.2.2
│ │ ├── strip-ansi@3.0.1
│ │ ├── tar@2.2.1
│ │ ├── text-table@0.2.0
│ │ ├── uid-number@0.0.6
│ │ ├── umask@1.1.0
│ │ ├─┬ validate-npm-package-license@3.0.1
│ │ │ ├── spdx-correct@1.0.2
│ │ │ └─┬ spdx-expression-parse@1.0.2
│ │ │ └── spdx-exceptions@1.0.4
│ │ ├─┬ validate-npm-package-name@2.2.2
│ │ │ └── builtins@0.0.7
│ │ ├─┬ which@1.2.11
│ │ │ └── isexe@1.1.2
│ │ ├── wrappy@1.0.2
│ │ └── write-file-atomic@1.1.4
│ ├── opener@1.4.1
│ ├── properties-parser@0.2.3
│ ├─┬ request@2.47.0
│ │ ├── aws-sign2@0.5.0
│ │ ├─┬ bl@0.9.5
│ │ │ └── readable-stream@1.0.34
│ │ ├── caseless@0.6.0
│ │ ├─┬ combined-stream@0.0.7
│ │ │ └── delayed-stream@0.0.5
│ │ ├── forever-agent@0.5.2
│ │ ├─┬ form-data@0.1.4
│ │ │ ├── async@0.9.2
│ │ │ └── mime@1.2.11
│ │ ├─┬ hawk@1.1.1
│ │ │ ├── boom@0.4.2
│ │ │ ├── cryptiles@0.2.2
│ │ │ ├── hoek@0.9.1
│ │ │ └── sntp@0.2.4
│ │ ├─┬ http-signature@0.10.1
│ │ │ ├── asn1@0.1.11
│ │ │ ├── assert-plus@0.1.5
│ │ │ └── ctype@0.5.3
│ │ ├── json-stringify-safe@5.0.1
│ │ ├── mime-types@1.0.2
│ │ ├── node-uuid@1.4.7
│ │ ├── oauth-sign@0.4.0
│ │ ├── qs@2.3.3
│ │ ├── stringstream@0.0.5
│ │ └── tunnel-agent@0.4.3
│ ├── semver@4.3.6
│ ├── shelljs@0.3.0
│ ├─┬ tar@1.0.2
│ │ ├── block-stream@0.0.9
│ │ └─┬ fstream@1.0.10
│ │ └─┬ rimraf@2.5.4
│ │ └── glob@7.1.1
│ ├── unorm@1.3.3
│ ├── valid-identifier@0.0.1
│ └─┬ xcode@0.8.9
│ ├── pegjs@0.9.0
│ └─┬ simple-plist@0.1.4
│ ├─┬ bplist-creator@0.0.4
│ │ └── stream-buffers@0.2.6
│ └── bplist-parser@0.0.6
├─┬ insight@0.8.4
│ ├── async@1.5.2
│ ├─┬ chalk@1.1.3
│ │ ├── ansi-styles@2.2.1
│ │ ├── escape-string-regexp@1.0.5
│ │ ├── has-ansi@2.0.0
│ │ ├── strip-ansi@3.0.1
│ │ └── supports-color@2.0.0
│ ├─┬ configstore@1.4.0
│ │ ├── graceful-fs@4.1.11
│ │ ├─┬ mkdirp@0.5.1
│ │ │ └── minimist@0.0.8
│ │ ├── uuid@2.0.3
│ │ ├─┬ write-file-atomic@1.2.0
│ │ │ ├── imurmurhash@0.1.4
│ │ │ └── slide@1.1.6
│ │ └── xdg-basedir@2.0.0
│ ├─┬ inquirer@0.10.1
│ │ ├── ansi-escapes@1.4.0
│ │ ├── ansi-regex@2.0.0
│ │ ├─┬ cli-cursor@1.0.2
│ │ │ └─┬ restore-cursor@1.0.1
│ │ │ ├── exit-hook@1.1.1
│ │ │ └── onetime@1.1.0
│ │ ├── cli-width@1.1.1
│ │ ├── figures@1.7.0
│ │ ├── lodash@3.10.1
│ │ ├─┬ readline2@1.0.1
│ │ │ ├── code-point-at@1.1.0
│ │ │ ├── is-fullwidth-code-point@1.0.0
│ │ │ └── mute-stream@0.0.5
│ │ ├── run-async@0.1.0
│ │ ├── rx-lite@3.1.2
│ │ └── through@2.3.8
│ ├─┬ lodash.debounce@3.1.1
│ │ └── lodash._getnative@3.9.1
│ ├── object-assign@4.1.0
│ ├─┬ os-name@1.0.3
│ │ ├─┬ osx-release@1.1.0
│ │ │ └── minimist@1.2.0
│ │ └── win-release@1.1.1
│ ├─┬ request@2.79.0
│ │ ├── aws-sign2@0.6.0
│ │ ├── aws4@1.5.0
│ │ ├── caseless@0.11.0
│ │ ├─┬ combined-stream@1.0.5
│ │ │ └── delayed-stream@1.0.0
│ │ ├── extend@3.0.0
│ │ ├── forever-agent@0.6.1
│ │ ├─┬ form-data@2.1.2
│ │ │ └── asynckit@0.4.0
│ │ ├─┬ har-validator@2.0.6
│ │ │ ├─┬ commander@2.9.0
│ │ │ │ └── graceful-readlink@1.0.1
│ │ │ ├─┬ is-my-json-valid@2.15.0
│ │ │ │ ├── generate-function@2.0.0
│ │ │ │ ├─┬ generate-object-property@1.2.0
│ │ │ │ │ └── is-property@1.0.2
│ │ │ │ └── jsonpointer@4.0.0
│ │ │ └─┬ pinkie-promise@2.0.1
│ │ │ └── pinkie@2.0.4
│ │ ├─┬ hawk@3.1.3
│ │ │ ├── boom@2.10.1
│ │ │ ├── cryptiles@2.0.5
│ │ │ ├── hoek@2.16.3
│ │ │ └── sntp@1.0.9
│ │ ├─┬ http-signature@1.1.1
│ │ │ ├── assert-plus@0.2.0
│ │ │ ├─┬ jsprim@1.3.1
│ │ │ │ ├── extsprintf@1.0.2
│ │ │ │ ├── json-schema@0.2.3
│ │ │ │ └── verror@1.3.6
│ │ │ └─┬ sshpk@1.10.1
│ │ │ ├── asn1@0.2.3
│ │ │ ├── assert-plus@1.0.0
│ │ │ ├── bcrypt-pbkdf@1.0.0
│ │ │ ├─┬ dashdash@1.14.1
│ │ │ │ └── assert-plus@1.0.0
│ │ │ ├── ecc-jsbn@0.1.1
│ │ │ ├─┬ getpass@0.1.6
│ │ │ │ └── assert-plus@1.0.0
│ │ │ ├── jodid25519@1.0.2
│ │ │ ├── jsbn@0.1.0
│ │ │ └── tweetnacl@0.14.5
│ │ ├── is-typedarray@1.0.0
│ │ ├── isstream@0.1.2
│ │ ├─┬ mime-types@2.1.13
│ │ │ └── mime-db@1.25.0
│ │ ├── oauth-sign@0.8.2
│ │ └── qs@6.3.0
│ ├─┬ tough-cookie@2.3.2
│ │ └── punycode@1.4.1
│ └── uuid@3.0.1
├─┬ nopt@3.0.1
│ └── abbrev@1.0.9
├── q@1.0.1
├── underscore@1.7.0
└─┬ update-notifier@0.5.0
├── is-npm@1.0.0
├─┬ latest-version@1.0.1
│ └─┬ package-json@1.2.0
│ ├─┬ got@3.3.1
│ │ ├─┬ duplexify@3.5.0
│ │ │ ├─┬ end-of-stream@1.0.0
│ │ │ │ └── once@1.3.3
│ │ │ └── stream-shift@1.0.0
│ │ ├── infinity-agent@2.0.3
│ │ ├── is-redirect@1.0.0
│ │ ├── is-stream@1.1.0
│ │ ├── lowercase-keys@1.0.0
│ │ ├── nested-error-stacks@1.0.2
│ │ ├── object-assign@3.0.0
│ │ ├── prepend-http@1.0.4
│ │ ├── read-all-stream@3.1.0
│ │ └── timed-out@2.0.0
│ └─┬ registry-url@3.1.0
│ └─┬ rc@1.1.6
│ ├── deep-extend@0.4.1
│ ├── ini@1.3.4
│ └── strip-json-comments@1.0.4
├─┬ repeating@1.1.3
│ └─┬ is-finite@1.0.2
│ └── number-is-nan@1.0.1
├── semver-diff@2.1.0
└── string-length@1.0.1
ChenfydeMBP:~ Chenfy$
ChenfydeMBP:~ Chenfy$