embercli
The command line interface for ambitious web applications.
为有野心应用设计的命令行。
| 1 | npm install -g ember-cli | 
翻译自https://ember-cli.com/,embercli 文档。
概括
Ember CLI 是 Ember.js 命令行提供了一个快速 Broccoli-powered 资源管道,一个非常符合惯例的工程结构,一个方便扩展的 插件系统.
Ember CLI的 资源编译系统 已经支持:
- Handlebars
- HTMLBars
- Emblem
- LESS
- Sass
- Compass
- Stylus
- CoffeeScript
- EmberScript
- Minified JS & CSS
除了上面这些, Ember CLI的 插件系统
提供了一种创建可复用代码单元的方法,用来扩展这个构建工具。查看插件emberaddons.
模块
Ember CLI 用 babel 把 ES2015 module  语法 转化成 AMD (RequireJS-esq) 模块。
使用一个定制过的解释器(resolver),Ember CLI可以在它需要的时候自动导入模块。比如路由器 routes/post.js 会知道使用控制器 controllers/post.js 应该使用模板 templates/post.hbs。
如果你的应用需要明确引入一个模块,你不会被自动解析限制,只需 import 一下就好了。
CLI 的测试
所有用 Ember CLI 构建的应用默认使用 QUnit 和 Ember QUnit。尽管这些是默认的,你也可以自由选择其他的,比如 Mocha 和 Ember Mocha。
依赖管理
Ember CLI 使用两个包管理了工具:
Bower, 用来管理自动更新的前端依赖(包括 jQuery, Ember, and QUnit)
npm, 用来管理应用的内部依赖。
两个包管理工具可以同时用来管理你的依赖。
运行环境配置
Ember CLI的运行环境可以通过一个叫做.ember-cli的文件配置。这个长得像 JSON 格式的文件必须放在根目录,命令行选项应该用小驼峰格式。比如:
| 1 | # ~/.ember-cli | 
正文安全策略
ember-cli-content-security-policy
插件可以用来启用在现代浏览器里跑开发环境的 正文安全策略 headers。启用正文安全策略headers可以帮助缓解几种特定类型的 XSS 工具或者数据注入。浏览器支持非常靠谱,
所以Ember CLI + Ember-CLI-Content-Security-Policy 插件使得建一个文本安全的应用十分简单。举例来说,生产环境启用headers十分简单。
社区
Ember CLI 是一个持续贡献的社区,它有持续的影响力。我们欢迎你提问,PR,修 bug,还有任何可以提高 Ember 开发者开发质量的事情。https://ember-cli.com/
Node
现在, Ember CLI 支持 Node (latest LTS recommended), npm (3.x and above) 还有 yarn。
用户指南
先决条件
Node
首先,装好最新的 LTS 版本的 Node。值得注意的是,装 node 别用 sudo,最好是用 nvm 来装 node。
| 1 | node -v | 
Ember CLI
装好 node 之后全局装 Ember CLI:
| 1 | npm install -g ember-cli | 
装完 ember 命令就可以用了
Bower
你要全局装一下Bower
| 1 | npm install -g bower | 
然后你就可以用 bower 命令行了。
Watchman
在 *nix 系统, 推荐装 Watchman version >= 4.x, 将会用一种更有效率地监控工程文件夹改动的方式。文件观察系统在 OSX 容易报错,Node 的内置 NodeWatcher 在监控大的目录树的时候有问题。Watchman
用其他的方法在这些问题和性能上都表现不俗。你可以通过这个文章查看 FB 的设计思路
here.
OSX:
| 1 | brew install watchman | 
完整的安装指令去查这个文档吧Watchman website。注意 npm 有个包不是用来安装的。看到这些提示说明装错了:
| 1 | invalid watchman found, version: [2.9.8] did not satisfy [^3.0.0], falling back to NodeWatcher | 
如果你的 npm 版本由于其他目的需要使用,确认它不在你的PATH ,不然:
| 1 | npm uninstall -g watchman | 
用这个命令检查它
| 1 | which -a watchman | 
最好,Watchman没装好的时候,调用不同的命令会触发同一个提示,可以放心的忽略他们:
| 1 | Could not find watchman, falling back to NodeWatcher for file system events | 
PhantomJS
有了 Ember CLI,你可以随便用自动化测试,但是大部分测试服务会要你用或者推荐用 PhantomJS。注意PhantomJS是 Testem 和 Karma 默认的运行程序。
如果你想用 PhantomJS 跑你的integration测试,它必须被全局安装:
| 1 | npm install -g phantomjs-prebuilt | 
创建新项目
运行 new 命令加上你要求的 app 名字来创建一个新项目:
| 1 | ember new my-new-app | 
Ember CLI 会创建一个新的 my-new-app 目录,然后生成应用的工程结构。
生成过程完成后可以开始加载程序:
| 1 | cd my-new-app | 
跳转到http://localhost:4200 可以看到你的 app.
跳转到http://localhost:4200/tests 可以看到你测试的结果
从一个已有Ember但没用 Ember CLI 的项目迁移
如果你的 app 在用已经废弃的Ember App Kit,这里是一个 迁移指南。
如果 app 全局用了其他的构建管道,如Grunt, Ember-Rails, or Gulp, 你可以试试用Ember CLI migrator。
Ember CLI migrator是一个命令行工具,看起来像是一个语法分析器,然后把代码根据 ember cli 的约定重写成 ES6。它会保持你的代码风格,而且保持 git 的历史通过git log --follow。
复制一个已有的项目
如果你 checkout 一个已有的 ember cli 工程项目,你需要安装 npm 和 bower 的依赖,然后运行服务:
| 1 | git clone git@github.com:me/my-app.git | 
使用 Ember CLI
| 命令 | 用途 | 
|---|---|
| ember | 打印可用命令列表 | 
| ember new <app-name> | 创建了一个叫 <app-name>的文件夹,在里面生成了应用结构。如果 git 可用,目录还会被初始化成一个有初始 commit 的 git 仓库。用--skip-git标记可用禁用这个特性。 | 
| ember init | 在当前文件夹生成应用结构。 | 
| ember build | 构建应用到 dist/目录 (自己指定可用--output-path标记)。用--environment标记来指定构建环境(默认为development)。用--watch标记来保持运行,改变发生时自动重新构建。 | 
| ember server | 开启服务,默认端口是 4200。用--proxy标记来转发 ajax 请求到某个地址。比如ember server --proxy http://127.0.0.1:8080会代理所有ajax请求到运行在http://127.0.0.1:8080的服务商. 别名:ember s,ember serve | 
| ember generate <generator-name> <options> | 运行一个指定的生成器。 ember help generate可以看有哪些生成器. 别名:ember g | 
| ember destroy <generator-name> <options> | 删除 generate命令创建的代码。如果代码生成的时候有--pod标记,你需要用同样的标记去跑destroy。别名:ember d | 
| ember test | CI 模式用 Testem 跑测试。你可以通过 testem.json文件传递任何参数。默认情况Ember CLI会搜索你的工程根目录。你也可以指定一个config-file. 别名:ember t | 
| ember install <addon-name> | 安装插件到工程,并将它保存到 package.json,有必要的话命令还会自己跑 blueprint. | 
文件夹布局
| 文件/目录 | 目的 | 
|---|---|
| app/ | 包含你Ember应用的代码。Javascript文件在这个文件夹会被编译和连接成一个文件 <app-name>.js。这个表格后面有更多信息 | 
| dist/ | 包括可以分发(优化后且独立)的应用输出。部署这个文件到服务器。 | 
| public/ | 这个目录包括逐字拷贝的文件。如图和字体等不需要构建的资源文件使用它。 | 
| tests/ | 包括你的单元和集成测试,同时加上助手函数。 | 
| tmp/ | 构建时临时应用和调试输出。 | 
| bower_components/ | Bower依赖 (默认值+用户安装的包)。 | 
| node_modules/ | npm依赖 (默认值+用户安装的包)。 | 
| vendor/ | 你不通过 bower 和 npm 安装的其他的依赖。 | 
| .eslintrc.js | ESLint 配置 | 
| .gitignore | Git忽略文件的配置。 | 
| ember-cli-build.js | 包含构建管道 Broccoli 的说明。 | 
| bower.json | Bower 配置和依赖。 | 
| package.json | npm 配置和依赖。主要用来列出资源编译的依赖 | 
app 文件夹里面的布局
| 文件/目录 | 目的 | 
|---|---|
| app/app.js | 你的应用的入口。这是执行的第一个模块。 | 
| app/index.html | 你的单页应用唯一的页面!包括依赖和 ember 应用。 | 
| app/router.js | 你的路由配置。这里定义的路由和 app/routes/处定义的路由差不多。 | 
| app/styles/ | 你的样式表,无论是SASS, LESS, Stylus, Compass, 还是朴素 CSS (尽管只允许用一种类型,详情可以看资源编译)。他们都会被编译成 <app-name>.css. | 
| app/templates/ | 你的 HTMLBars模板。他们会被编译到 /dist/assets/<app-name>.js。模板命名和他们的名字一样(i.e.templates/foo/bar.hbs->foo/bar)。 | 
| app/controllers/,app/models/, etc. | Ember CLI解释器生成的模块 | 
app/index.html
app/index.html 文件放置了你的基础架构。它是一个基于 DOM 结构的布局,设置了标题属性,引入了样式表。另外,app/index.html包括多个hook
| 1 | {{content-for 'head'}} | 
可以被插件注入到应用的head 或 body。这些hook需要留在合适的位置,你也可以安全地忽略你没有操作的插件。
插件
插件会在 npm 注册,使用关键词ember-addon。查看完整列表 here.
子路径上开发
如果你的 app 不是运行在根路由上(/),而是一个子路径 (比如/my-app/),你的 app 只能在 /my-app/路由上访问,而不能在 /my-app上。有时候这可能很艹蛋。因此,你应该用这个简单的代码片段来确保你的路由去了对的地方:
| 1 | // index.js | 
直接把它放到/server文件夹里的index.js里,(这样跑本地服务器的时候才会启用)。这段代码测试这个 url 是不是/my-app/前缀。如果不是会跳转。