项目架构及自动化创建
1. 创建项目:Express 应用生成器
Express 应用生成器
通过应用生成器工具 express
可以快速创建一个应用的骨架。
通过如下命令安装:
$ npm install express-generator -g
-h
选项可以列出所有可用的命令行选项:
$ express -h
Usage: express [options] [dir]
Options:
-h, --help output usage information
-V, --version output the version number
-e, --ejs add ejs engine support (defaults to jade)
--hbs add handlebars engine support
-H, --hogan add hogan.js engine support
-c, --css <engine> add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css)
--git add .gitignore
-f, --force force on non-empty directory
例如,下面的示例就是在当前工作目录下创建一个命名为 myapp 的应用。
$ express myapp
create : myapp
create : myapp/package.json
create : myapp/app.js
create : myapp/public
create : myapp/public/javascripts
create : myapp/public/images
create : myapp/routes
create : myapp/routes/index.js
create : myapp/routes/users.js
create : myapp/public/stylesheets
create : myapp/public/stylesheets/style.css
create : myapp/views
create : myapp/views/index.jade
create : myapp/views/layout.jade
create : myapp/views/error.jade
create : myapp/bin
create : myapp/bin/www
然后安装所有依赖包:
$ cd myapp
$ npm install
启动这个应用(MacOS 或 Linux 平台):
$ DEBUG=myapp npm start
Windows 平台使用如下命令:
> set DEBUG=myapp & npm start
然后在浏览器中打开 http://localhost:3000/
网址就可以看到这个应用了。i
通过 Express 应用生成器创建的应用一般都有如下目录结构:
.
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade
7 directories, 9 files
通过 Express 应用生长期创建应用只是众多方法中的一种。你可以不使用它,也可以修改它让它符合你的需求,都是开源的嘛!
2. 自动化构建
-
gulp.js - 基于流的自动化构建工具。
-
Browserify —— 利用Node.js实现JS模块化加载
-
jade浏览器端模板: jadeify As with most browserify transforms, you can configure jadeify via the second argument to bundle.transform:
bundle.transform(require("jadeify"), { compileDebug: true, pretty: true });
or inside your package.json configuration:{ "name": "my-spiffy-package", "browserify": { "transform": [ ["jadeify", { "compileDebug": true, "pretty": true }] ] } }
-
Bower - A package manager for the web
-
- 安装babelify:
npm install --save-dev babelify
- 使用
- CLI:
browserify script.js -o bundle.js -t [ babelify --presets [ es2015 react ] ]
- Node:
var fs = require("fs"); var browserify = require("browserify"); browserify("./script.js") .transform("babelify", {presets: ["es2015", "react"]}) .bundle() .pipe(fs.createWriteStream("bundle.js"));
- 安装babelify:
3. 启动
npm install
bower install
- gulp:
gulp builds
||gulp watch.dev
- start server:
set DEBUG=myappgenerator & npm start
4. 使用 superagent 与 cheerio 完成简单爬虫
- 学习使用 superagent 抓取网页 superagent( http://visionmedia.github.io/superagent/ ) 是个轻量的的 http 方面的库, 是nodejs里一个非常方便的客户端请求代理模块,当我们需要进行 get 、 post 、 head 等网络请求时,尝试下它吧。
- 学习使用 cheerio 分析网页 cheerio( https://github.com/cheeriojs/cheerio ) 大家可以理解成一个 Node.js 版的 jquery, 用来从网页中以 css selector 取数据,使用方式跟 jquery 一样一样的。
- eventproxy eventproxy( https://github.com/JacksonTian/eventproxy ) 非常轻量的工具,但是能够带来一种事件式编程的思维变化。 用 js 写过异步的同学应该都知道,如果你要并发异步获取两三个地址的数据,并且要在获取到数据之后,对这些数据一起进行利用的话, 常规的写法是自己维护一个计数器。先定义一个 var count = 0,然后每次抓取成功以后,就 count++。如果你是要抓取三个源的数据, 由于你根本不知道这些异步操作到底谁先完成,那么每次当抓取成功的时候,就判断一下count === 3。当值为真时,使用另一个函数继续完成操作。 而 eventproxy 就起到了这个计数器的作用,它来帮你管理到底这些异步操作是否完成,完成之后,它会自动调用你提供的处理函数,并将抓取到的数据当参数传过来。
- async async( https://github.com/caolan/async#queueworker-concurrency ),async是一个流程控制工具包, 提供了直接而强大的异步功能mapLimit(arr, limit, iterator, callback)。 这次我们要介绍的是 async 的 mapLimit(arr, limit, iterator, callback) 接口。 另外,还有个常用的控制并发连接数的接口是 queue(worker, concurrency) ,大家可以去看看它的API。 当你需要去多个源(一般是小于 10 个)汇总数据的时候,用 eventproxy 方便; 当你需要用到队列,需要控制并发数,或者你喜欢函数式编程思维时,使用 async。