Install
如果还没有安装 Meteor,那么在命令行中输入:
If you have not yet installed Meteor, do that:
1 | curl https://install.meteor.com | /bin/sh |
Init
安装成功之后初始化项目也是相当容易的。
同时,因为我们要使用 React 插件,于是在创建项目之后就立马添加了插件。
1 | meteor new project-name |
Structuring
Html
Meteor 是会自动将需要的包和文件插入到 html 中的,因此我们可以看到 project-name.html
中只声明的简单的 <head>
和 <body>
没有看到任何的 <script>
或 <link>
等。
Server and Client
Meteor 的本意就是服务端和客户端跑同一份代码,但有一些代码的确也是只在服务端或客户端运行的,可以用以下方法区别:
1 | if (Meteor.isClient) { |
特别的,可以在根目录下创建 client
和 server
文件夹,其中的文件就分别只在客户端和服务端运行。其他更复杂的情况可以看 这里
File Load Order
这里直接引用官网的介绍了:
- HTML template files are always loaded before everything else
- Files beginning with main. are loaded last
- Files inside any lib/ directory are loaded next
- Files with deeper paths are loaded next
- Files are then loaded in alphabetical order of the entire path
Run
运行工程,跑起来
1 | meteor |
Add ReactRouter
平常我使用 React 都会同时使用 React Router,但在 Meteor 中却没有这么容易,因为它自身的 npm 很不好使(不是我们平常的 npm i
能解决的)。好在 教程 写得比较清楚:
Add the relevant Meteor packages
添加 meteorhacks:npm
和 cosmos:browserify
1 | meteor add meteorhacks:npm cosmos:browserify |
Add the npm modules you want to packages.json
在项目根目录创建 packages.json
文件,用来声明 dependences
1 | { |
Configure Browserify and transforms in app.browserify.options.json
添加 lib/app.browserify.options.json
用于声明 Browserify 的配置:
1 | { |
Add the appropriate require statements to app.browserify.js
创建 lib/app.browserify.js
文件,在这里面就可以引用 npm 包了!
1 | ReactRouter = require("react-router"); |
Use React Router
我们可以在 client/main.jsx
中定义路由:
1 | var { Link, Route, DefaultRoute, RouteHandler } = ReactRouter; |
less
如果要使用 less,也是很简单的,
1 | meteor add less |
之后在根目录创建 less 文件即可。不需要手动编译也不需要插入文件到 html 中。
Router
比较出名的第三方插件有下面两个:
There are two main third-party packages to choose between:
但是因为我只需要一个简单的服务端的路由,所以我就用了官方提供的 这个:
But I just want an simple server-side router, so I use the offical one:
1 | meteor add webapp |
例如我们需要一个地址为 http://localhost:3000/mock
的接口,返回 JSON 数据:
For example, we create an api on http://localhost:3000/mock
which provide a JSON response:
1 | WebApp.connectHandlers.use('/mock', function(req, res) { |
其中的 req
和 res
就 Node.js 的 http.IncomingMessage 和 http.ServerResponse,用法也相同。
The req
and res
in the callback function is the same on Node.js
Reference
Getting Started with Meteor, React, and React Router