Angular-seed的使用

从零开始创建一个前端工程,正式编码前的准备工作是非常繁琐的,而且,对于像我这样的前端新手,可能都没法胜任。于是有了一些模板工程,可以作为一个工程的起点。

对于使用Angular的人来说,Angular-seed是个不错的选择(https://github.com/mgechev/angular-seed)。

在使用中碰到了一些问题,为了解决问题不得不多做了一些了解。我觉得这些了解对于一个前端刚入门的人还是有很大实际用处的。

build

Angular-seed使用gulp作为构建工具。
根目录下的 gulpfile.ts 定义了各种gulp task,实际上task 是定义在tools/tasks目录下面,在gulpfile.ts 加载了这些任务。任务分为angular-seed预先提供的任务,放在tools/tasks/seed目录下,另一类是本工程自定义的任务, 放在 tools/tasks/project目录下。 另外,可以把多个简单任务组合起来,形成一个 复合任务,通过 loadCompositeTasks()加载。复合任务定义在 tools/config下的 seed.tasks.json 和 project.tasks.json中。

配置

默认的配置在 tools/config/seed.config.ts 中,项目自定义的配置一般放在 tools/config/project.config.ts。

SystemJS的配置
Angular-seed使用的打包工具是SystemJS, 在 seed.config.ts 中和SystemJS相关的配置包括: SYSTEM_CONFIG_DEV, SYSTEM_CONFIG, SYSTEM_BUILDER_CONFIG。

可以在 project.config.ts 中补充或者覆盖SysteJS的相关配置,例如:

this.mergeObject(this.SYSTEM_CONFIG_DEV, {
      transpiler: ‘plugin-babel‘
    });
    this.mergeObject(this.SYSTEM_BUILDER_CONFIG[‘packages‘], {
      ‘d3-selection‘: { main: ‘index.js‘, meta: { format: ‘esm‘}},
      ‘angular2-uuid‘: { main: ‘index.js‘, meta: { format: ‘esm‘}},
    });

CSS和字体文件

添加字体和样式, 官方wiki上有说明: https://github.com/mgechev/angular-seed/wiki/Add-external-fonts

https://github.com/mgechev/angular-seed/wiki/Add-external-scripts-and-styles
需要注意的一点:对于CSS文件,如果是按照 wiki 上的说明,通过配置 this.NPM_DEPENDENCIES 注入CSS文件,则指定的CSS文件的内容都会被注入 main.css, 但是有时候你可能希望添加的CSS文件仍然保持独立,这时候需要自己添加一个任务,就像添加字体那样,在build过程中把相应的CSS文件拷贝 dist/ 下面相应的目录中。 并且,你还需要在 client/index.html 中加上相应的加载 CSS文件的 <link>元素,例如: <link rel="stylesheet" href="<%= APP_BASE %>assets/fonts/font-awesome-4.7.0/css/font-awesome.min.css">

index.html
index.html 是一个模板, 在构建过程中,使用gulp插件 gulp-template 渲染成实际的 html 。gulp-template实际使用了lodash 库的 _.template 来填充模板,其占位符的格式非常灵活,还可以自定义,index.html中用到的几种占位符的含义:
<%= APP_TITLE %>  内插字符串, 即从数据中找到 APP_TITLE 对应的值,替换 <%= APP_TITLE %>
<% if (BUILD_TYPE === ‘dev‘) { %> ,  把 <% ... %> 内的字符串作为 JS 语句进行 eval 。

单元测试
有几点需要注意:  
    1. 测试用例需要放在一个 main 函数中,这是 Angular-seed的规定,形式可参考Angular-seed自带的几个组件的
spec文件,相关 issue:  https://github.com/mgechev/angular-seed/issues/922

2. 默认的测试任务是不能调试测试用例的,就是自动运行所有用例,然后浏览器就关闭了,如果希望调试用例,可以
自己加个调试任务,比如 karma.debug.ts:

import Config from ‘../../config‘;

    import * as karma from ‘karma‘;
    import { join } from ‘path‘;

    const startKarma = (done: any, config: any = {}) => {
      return new (<any>karma).Server(Object.assign({
        configFile: join(process.cwd(), ‘karma.conf.js‘),
        singleRun: false
      }, config)).start(done);
    };

    /**
     * Executes the build process, running all unit tests using `karma`.
     */
    export = (done: any) => {
      return startKarma(done, Config.getKarmaReporters());
    };

3. 根据需要修改根目录下 karma.conf.js 文件  
  比如,添加一些测试时需要serve的文件,在 files: [ ... ] 内添加:  
    { pattern: ‘node_modules/someModuleForTest/**/*.js‘, included: false, watched: false, served:true },
        
i18n
i18n 默认是关闭的,可以按照wiki上的说明打开:  https://github.com/mgechev/angular-seed/wiki/Enabling-Angular-i18n-native
但是,除此以外,还有一些问题,wiki上没提到:
1. 要修改根目录的 tsconfig.json 的配置,可以参考: https://github.com/mgechev/angular-seed/issues/1440
主要就是要在 "files": [...] 里加上 "src/client/app/main.ts" ,在 "exclude": [ ... ] 里加上  "tools" 。

2. package.json 里面定义的 i18n 任务 : "i18n": "ng-xi18n && gulp clean.i18n"  ,
    其实后一个任务 clean.i18n 是不存在的,所以, 要么删掉后半句,要么你自己创建这样一个任务。
    
此外, 在执行 npm run i18n 的时候,可能会由于 ts 编译时候的一些类型或者变量不识别导致任务执行失败,但是没关系,这不影响 生成 messages.xlf 文件。

lazy-loading
目前暂不支持,但是有人自己做了(看起来工作量还不小),没合入主分支,具体可参考:
https://github.com/mgechev/angular-seed/issues/1844
https://github.com/mgechev/angular-seed/pull/1714

时间: 2024-10-10 21:35:43

Angular-seed的使用的相关文章

Angular项目构建指南 - 不再为angular构建而犹豫不决(转)

如果你不知道什么是Angular或者根本没听说过,那么我接下来所说的对你来说毫无益处,不过如果你打算以后会接触Angular或者干脆要涨涨姿势~读下去还是有点用的. Angular和它之前所出现的其余前端框架最大的不同,在于它的核心不再是DOM,而是数据,是model.我们惯用的不管是单纯的jQuery还是MVC的Backbone,它们本质仍是让我们更方便更有条理的操作DOM,但是Angular不是.通过一系列魔术般的手法,它将一切的重心转移到数据上.以开发应用而不是操作节点的方式去开发Web,

后台管理UI皮肤的选择

后台管理UI的选择 目录 一.EasyUI 二.DWZ JUI 三.HUI 四.BUI 五.Ace Admin 六.Metronic 七.H+ UI 八.Admin LTE 九.INSPINIA 十.LigerUI 十一.FineUI 十二.其它UI 十三.总结 最近要做一个企业的OA系统,以前一直使用EasyUI,一切都好,但感觉有点土了,想换成现在流行的Bootstrap为基础的后台UI风格,想满足的条件应该达到如下几个: 1.美观.大方.简洁 2.兼容IE8.不考虑兼容IE6/IE7,因为

reqiurejs学习

RequireJS 优化 Web 应用: http://www.ibm.com/developerworks/cn/web/1209_shiwei_requirejs/ 1.模块之间的依赖关系 2.如何配置requirejs RequireJS 快速入门 http://www.cnblogs.com/yexiaochai/p/3214926.html http://blog.csdn.net/joyhen/article/details/21166757 http://www.cnblogs.c

为WEB程序员准备的20+有用的AngularJS工具

AngularJS是动态的Web应用程序的结构框架,最初由Misko Hevery开发,目前由谷歌维护.它有助于以灵活的方式创建Web应用程序.本篇文章就为大家分享20+非常有用个AngularJS工具. Sublime Text是一个非常有效的文本编辑器工具,易于切换项目,高度可定制.JASMINE,它基本上就是专门为JavaScript用户设计的.CodePen是前端程序员开发HTML.JS.CSS的完美编辑工具. Angular Deckgrid Angular fire Angular

基于requirejs和angular搭建spa应用

接上篇,angular 实战部分,angular比较适合spa项目,这里不借助任何seed和构建工具,直接从零搭建,基本的angular项目结构大致包含如下几个部分: 1)app.js 入口 2)index.html html框架页 3)lib(vendor)第三方类库 4)components 业务组件 5)styles/images 静态资源部分 1.常规实现 创建文件夹demo1,按照上述结构分别创建app.js ,index.html文件,创建lib.components.styles和

实践总结 - 不可错过的Angular应用技巧

angular的核心思想是通过数据驱动一切,其他东西都是数据的延伸. 套用Javascript一切皆对象的思想,在angular中可以说一切皆数据. 关于项目构建  (1) requirejs以及Yeaoman 在刚开始接触或者使用Angular的时候,总会疑惑与类似的问题,我实践的答案是不需要requirejs或者Yeaoman.前者不使用,因为angular本身有module的实现.后者是因为Angular组织结构以及项目构建完全不必要弄得如此繁杂,手写或者在github上pull一个see

angular中模板

<!DOCTYPE html><!--调用模块--><html lang="en" ng-app="myApp"><head> <meta charset="UTF-8"> <script src="js/angular.js"></script> <title>Title</title></head><

利用angular打造管理系统页面

1 创建一个新的angular应用 ng new adminSystem 2 利用WebStorm打开adminSystem应用 3 借助AdminLTE这个开源项目来辅助开发 AdminLTE项目:点击前往 将AdminLTE项目的精简版本源代码复制到adminSystem应用主模块的主组件的模板中 AdminLTE项目的精简版本效果图 <!DOCTYPE html> <!-- This is a starter template page. Use this page to star

Angular基础(二) 组件的使用

? 一.简单操作 a) 使用Angular CLI可以快速创建项目框架,先运行 $ npm install –g @angular/[email protected]安装CLI,为CLI的位置设置环境变量,然后就可以全局使用ng命令了. 执行ng new –ng4 angular-hello-world可以创建Angular4项目,会自动生成基础的文件夹和文件,还会自动进行npm i操作,下载并安装所需的依赖. 然后执行ng serve就可以编译并启动这个程序了,但ng并不会自动打开浏览器. b

Angular 2基础(一) 环境搭建

Angular2是一款开源JavaScript库,由Google维护,用来创建页面应用程序.正式发布于2016年9月,基于ES6开发. 一.准备工作 使用Angular2开发,需要预先做一些配置上的配置,如NPM.Node.Js.Git等,还要对TypeScript有个大概的了解. a)NPM是随同NodeJS一起安装的包管理器,那应该类似NuGet的作用了.NPM集成在了NodeJS安装包,可以一起安装,在CMD输入npm –v和node –v可以验证是否已安装. b)TypeScript则是