Angular 多模块项目构建过程

来源:脚本之家  责任编辑:小易  

一般来说,一个管理后台的构建的基本流程是: 选择一个开发语言 选择一种数据库 选择一个开发轮子(framework) 在轮子上搭建前端框架 实现业务逻辑。 一旦一个后台做出来以后,有了技术积累,以后其他的项目都是克隆版本,这样的流程的缺陷是:

引言

两个月前,已存在录题系统,需要构建出题系统,且两套系统存在公用的实体、组件以及服务,如何在构建新系统的同时复用原系统的代码成为了项目难点。

最新版的angular cli提供 -aot压缩选项。具体看cli官方文档。 项目本身分模块做懒加载,然后prod+aot+gzip在nginx上跑,大小还是能够接受的

当时的解决方案是将两个系统放在一个应用里,并为该应用配置两套构建方案,当进行 ng serveng build 时,加载相应配置,动态构建出两套系统,从而解决了共享代码的问题。

将src/polyfills.ts文件中,如图的代码块取消注释就可以了

现在再去看 Angular ,理解又不同了。

让我们从零开始,使用Typescript构建一个超级简单的 AngularJs 2应用。 先跑一个DEMO 运行这个 DEMO先来感受一下 AngularJS2 的应用。 下面是这个应用的文件结构 angular2-app _ app _ appponentponentponent 就是我们的第一个模块的名称。 一些

新的思想与理解都源于后端的思考,在构建后端项目时,为了实现代码复用,会构建多模块。

ng build -prod -aot打包出dist文件夹,然后把dist文件夹内的文件放到服务器就可以了

就像下图所示一样,通用的代码放在 CoreCommon 模块中,各业务模块依赖这两个模块,通过模块间依赖实现代码复用。

1、可能是网络问题。没刷新完全之前分享不了。检查一下手机上的网络问题,是否网络信号不好,网络不稳定或者网速过慢,导致了无法分享内容到朋友圈,可以尝试连接无线wifi,或者网络情况变好以后再尝试。2、也有可能是微信内容敏感。检查一下分享的内容是否存在违法等内容,对相关分享的内容进行认真的核对和修改,直到符合相关的规范以后再分享。3、功能被限制。可能是微信账号存在一定的违规行为,导致了分享到朋友圈的功能被限制使用了,可以尝试联系微信在线客服,咨询具体的情况,步骤如下:登录个人的微信,先点击”我“,再点击”设置“;在”设置“里点击打开”关于微信“之后,点击”帮助和反馈“;在”帮助和反馈“页面右下角处

那么问题就来了,在 Angular 里,我们可不可以像后台一样去构建多模块项目,以达到复用的目的呢?

这分明是拉着日本人来打中国人,陈导你太让人失望了。泱泱大国十四亿人口,再怎么样找个演员不是难事,不知你出于什么考量,挖空心思找个日本人来主演,这也太伤中国人民感情了。中日二国历史恩怨不是说了就了的。虽说艺术无国界,但观众是有国界的,主题是有国界的。好的电影,除了制作导演演员水平还有全体主创演职人员的人品,你如此人品,笔者可以肯定不会为该片买单。希望更多同胞站出来与我一起抵制,抵制这位毫无民族自尊心的陈凯歌。青年画家俞果说了对,我们在审视历史,但我们终将成为历史,我们可以贫困,但我们无权被后人耻笑。(本题用图由果酱女王俞果创作)

实现

参考学习

疑问一:选择手动挡还是自动挡?   其实手动挡还是很好开的,比如起步较相同级别的自动挡车型更快,恨不得挠着地就蹿出去了~油耗也更低,还有就是控制挡杆降档超车听着转速提升扭矩增大发动机轰鸣的那种快感,都非常让人着迷。自动挡车型则是机器控制,汽车上所有电子控制的那些玩意,都有个共同的毛病,就是它们都没长眼睛!并且它们那逻辑怎样也不会比人的脑袋清楚。  当然,自动挡也没有那么一无是处,随着科技的发达,自动挡车型的逻辑已经非常清晰了,它再聪明也赶不上人的大脑!大多数人更喜欢自动挡汽车,原因是方便,开着不累,就好比堵车,如果不幸生活在帝都,早晚高峰开着手动挡的车走一圈下来左脚已经抽筋到不能自理这时

之前一直使用 Angular Multi Module 作为关键字进行搜索,结果查询出来的都是多模块惰性加载的文章,参考意义不大。

还能不能挽回,爱情如同装修新房,一个男人和一个女人用爱共同创建了只属于他俩人的一片新天地,虽然装修新房实在是一件耗时耗力又耗财的事情,但因为两个人都在高兴头上,也就义无反顾地尽情投入。精心装修之后,两个人欢天喜地住了进去。却难免有些疏漏,那有欠缺,更不用说装修本身总要落伍和陈旧,到那时重新装修似乎势在必行,可十有八九男女都会选择将就下去,因为他们已没有了从头再来的那股劲头了。

直到最近才发现之前搜索的关键字错误,应该是 Angular Multi Library And Application

具体学习请参考以下两篇文章:

ANGULAR WORKSPACES: MULTI-APPLICATION PROJECTS

创建库 - ANGULAR官方文档

初始化命令

创建一个 Angular 项目,其名为 angular-project ,不创建 Application ,不进行交互,跳过依赖的安装。

ng new angular-project --createApplication=false --interactive=false --skipInstall=true

生成库 common ,生成应用 sso ,跳过依赖的安装。

ng g library common --skipInstall=true ng g application sso --style=scss --routing=true --skipInstall=true

安装依赖:

npm install --registry=https://registry.npm.taobao.org

项目结构

最终的项目结构长这样,所有模块位于 projects 目录下。

Angular Library 的结构如下,就像平常用的一样,也有 ModuleModule 中包含组件、服务等等。

同时我们开始反思之前用过的 ShareModule ,其实我们应该将其做成一个 Angular Library ,并将其发布到 npm 仓库,这样在多个项目之间快速移植公共模块也更高效快捷。

但是在开发过程中,共享模块可能有所改动,频繁发布就有些麻烦,如何直接引用本地的模块呢?

构建 common 库:

ng build common

如果该库频繁改动的话,可以添加监听参数,文件修改后自动构建:

ng build common --watch

命令执行后会在 dist 目录生成构建成功的 common 库。

使用起来就像我们使用的其他 Angular 库一样,直接 importWebStorm 会自动提示。

import { CommonModule } from 'common';

测试

在业务模块中引入 CommonModule

import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { CommonModule } from 'common'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, AppRoutingModule, CommonModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }

AppComponent 组件中使用 CommonModule 中的 CommonComponent

<h1>App Component HTML</h1> <lib-common></lib-common>

注:库组件生成的默认前缀是 lib

进入业务组件进行 ng serve ,成功。

总结

以上所述是小编给大家介绍的Angular 多模块项目构建过程,希望对大家有所帮助!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

如何构建angularjs工程

AngularJS的官方网站上给出了这个框架的基本使用方法,如:

如何引入AugularJS,从而让你的web应用使用该框架

如何添加控件,并对其进行数据绑定

如何进行表单验证

如何与服务器通信

如何创建可重用的组件

如何对组件进行本地化

如何让应用可嵌入、可注入和可测试

另外,网站上还给出了一系列教程,跟随这些内容,我们可以从深入浅出地逐渐对AngularJS的各种特性和用法有很好的了解,进而很好地开始使用这一框架。

但是,正如Brian Ford所说,官方文档中并没有告诉开发者,当应用逐渐增长,其中包含上万甚至几十万行代码的时候,应该如何组织和管理它,而他的blog正是对这些内容以及最佳实践的总结。

这篇blog特别关注的是大型应用程序,作者首先给出的建议是,尽量不要让应用变得太巨大。而应该编写小型、功能专注的、模块化的部分,然后逐渐把它们组合起来,变得越来越大,从而构成你的应用。

接下来,Brian Ford首先讲述了如何组织应用的结构,然后对性能、测试、工具、服务器和构建过程做了简要的总结。

在应用的组织结构方面,Brian Ford针对各个方面给出如下建议:

目录:建议在根目录中只放置index.html一个文件,然后根据需要创建scripts、styles、views等目录,在scripts目录下,首先会存放app.js文件,然后在之下又可以创建多个子目录,如:controllers、directives、filters、services、vendor等,在其中分门别类地存放不同的内容。并且,随着你为应用创建更多内容,也许会增加更多子目录来存放各种文件。

文件:每个文件中应该只有一件事物,这件事物可能会是控件、指令、过滤器或者服务等等。这会生成比较小但更专注的文件。也有利于更好地进行测试。

模块:首先在app.js中定义和配置所有模块,如:

angular.module('yourAppName', ['yourAppDep']);

angular.module('yourAppDep');

然后在模块中定义控件、服务等,如:

angular.module('yourAppDep').controller('MyCtrl', function () {

// ...

});

依赖关系:一般来说,服务、控件、指令等应该拥有尽可能少的依赖关系,这是非常好的软件开发实践,会有助于测试。API应该分层。控件尤其不能综合多种不同级别的抽象。

指令:对指令使用app专用的前缀,这有助于避免与第三方的组件重名。例如下面的代码中就用“btla”作为前缀:

angular.module('yourAppDep').directive('btlaControlPanel', function () {

// ...

});

服务:你可以使用下面的方式声明服务:

angular.module('yourAppDep').service('MyCtrl', function () {

// ...

});

模型:AngularJS作为JavaScript框架,其独到之处就在于让你可以完全掌控模型层。这是AngularJS的强大之处,因为应用程序的核心是你的数据,而各种应用之间的数据又有很大区别。所以Brian Ford强烈建议要仔细考虑使用和中数据,以及将会如何存储数据。

控制器:建议控制器以“Ctrl”开头,如:

angular.module('yourAppDep').controller('MyCtrl', function () {

// ...

});

除了上述内容,Brian Ford还在文章中针对性能、测试等方面给出了各种建议:

在性能方面,AngularJS应用一般会非常非常快。大多数应用不需要做任何特殊的优化,因此,除非你发现严重的性能问题,否则就应该把时间花在其他方面来改善应用。

对于大型项目来说,测试非常重要。它让你可以自信地进行重构,而这对于保持大型项目代码整洁非常重要。大型应用应该既拥有单元测试,也要拥有端到端(end-to-end)测试。单元测试有助于定位问题,而端到端的测试能够确保整个应用像期望的那样工作。每个控制器、服务、过滤器和指令都应该拥有一系列单元测试。而应用的每个特性都应该拥有端到端的测试。

在工具方面,首先推荐使用Yeoman,从而获得最佳实践和很好的项目结构,另外还有AngularJS Batarang,它对于调试和找到性能瓶颈会很有效。

在服务器方面,你可以使用任何想要的服务器和AngularJS协作。它只是客户端的程序库。我的推荐和喜欢的设置是使用Node.js加nginx。我使用nginx存放静态文件,使用Node.js创建RESTful的API和嵌入的(socketed)应用。对于云提供商,我曾经成功使用过Nodejitsu 和Linode。前者会让你更容易地部署程序,你不需要关心服务器的环境。如果你需要对服务器环境有更多控制,那么Linode会让你从底层控制虚拟机。Linode还提供了很好的API,可以用来管理虚拟机。

构建过程方面,我认为Angular还需要做更多改进,我在2013年最大的目标就是要对此有所贡献。我已经发布了ngmin,希望这个工具可以最终解决为生产环境最小化AngularJS应用的问题。

……

最后,Brian Ford做出结论:AngularJS是一种非常适合编写大型应用的JS框架。你可以直接拿来使用,它很快,并且会对组织应用的结构很有帮助。

AngularJS项目中如何实现按需加载js文件?

使用angularjs + requirejs就可以实现js文件的按需加载。

实现代码如下:

define(['app','navData'], function (app) {

app.config(function($stateProvider, $urlRouterProvider, $controllerProvider, navData){

app.registerController = $controllerProvider.register;

app.loadJs = function(js){

return function($rootScope, $q){

var def = $q.defer(), deps=[];

angular.isArray(js) ? (deps = js) : deps.push(js);

require(deps,function(){

$rootScope.$apply(function(){

def.resolve();

});

});

return def.promise;

};

}

$urlRouterProvider.otherwise('/memory');

angular.forEach(navData, function(it){

var st = it.state.split(/\./gi),

ctrlPath = 'controllers/' + st[0],

ctrlName = 'ctrl.' + st[0]

;

$stateProvider.state(st[0],{

url : '/' + st[0],

templateUrl : 'tpls/' + st[0] + '.html',

controller : ctrlName,

resolve:{

deps:app.loadJs(ctrlPath)

}

});

})

});

});

angular2创建项目需要多久

这个要看你的网速怎么样,因为当你使用ng new project_name命令创建一个项目时,需要下载项目所需的依赖包。而这个依赖包在是在国外的网站上,因为墙的原因,可能导致下载速度非常慢。(可以安装淘宝镜像)

angular创建项目时 ng new A 就出现了以下问题

ng-bind和ng-model的区别

AngularJS的数据绑定有ng-bind和ng-model,一般用于如下:

<input ng-model="object.xxx">

<span ng-bind="object.xxx"></span>

ng-bind是单向绑定,由作用于$scope到view层,且在HTML控件(HTML控件有:input、select、button和textarea)中不可显示。

ng-model是双向绑定,$scope<--->view层。

{{}}用于显示数据。

完整代码

<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <style> div textarea{ background-color:yellow; } </style> <script src="https://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body ng-app="myNoteApp"> <div class="aa" ng-controller="myNoteCtrl"> <h2>我的笔记</h2> <p> <textarea ng-model="message" rows="10" cols="20" maxlength="100"> </textarea> </p> <p> <button ng-click="save()">保存</button> <button ng-click="clear()">清除</button> </p> <p>Number of characters left: <span ng-bind="left()"></span></p> <p>Number of characters left(method2): <span>{{leftvar}}</span></p> </div> <script> var app = angular.module("myNoteApp",[]);本回答被网友采纳

如何搭建一个Angular4.0程序

第一步:安装node.js,如果电脑上有,请忽略。

到官网https://nodejs.org/en/下载,一步一步安装即可。

第二步:搭建Angular开发环境

打开控制台win+R,执行安装angularCLI安装命令,npm install -g angular-cli@latest,接着会提示AngularCLI安装完成;

创建Angular项目目录,使用cd命令进入你想要的项目文件夹(使用默认的也都无所谓),执行 ng new Demo1即可,等待其为你的项目下载必须的架包即可;

第三部,开发Angular组件

使用IDE打开建立的项目,在IDE的控制台输入npm run start让程序跑起来,到浏览器中打开http://localhost:4200即可看到自己搭建的第一个Angular程序;

Angular是组件化的前端开发框架,需要自己为程序创建新的组件,同样是在IDE的控制台键入命令,ng g component firstComponent,即可创建自己的组件,每个组件中分为四个文件,一个是.css文件,负责处理组件的样式信息,一个是.html模板文件,负责编写HTML代码,一个是.spec.ts文件,这个文件用于测试,开发过程中无需管他,还有一个就是.ts文件了,这个负责实现与html中的数据交互的,常见的是数据绑定、实现HTML中标签的路由、实现Angular核心的功能DI(依赖注入)等;

编写好自己的组件后,需要将自己的组件加入到主模块中,只需要在根目录中的index.html中的任意位置的加入<app-first-component></app-first-component>(依你创建的组件名称决定app-后面的内容);

刷新浏览器中的页面,即可看到自己变下的组件显示出来了。

  • 本文相关:
  • @angular前端项目代码优化之构建api tree的方法
  • angular.js项目中使用gulp实现自动化构建以及压缩打包详解
  • 详解如何构建angular项目目录结构
  • 详解webpack+es6+angular1.x项目构建
  • angular学习笔记之集成三方ui框架、控件的示例
  • 浅谈angularjs2中的界面跳转方法
  • 使用angularjs对路由进行安全性处理的方法
  • angular实现svg和png图片下载实现
  • 详解angularjs中的依赖注入
  • 解析angular 2+ 样式绑定方式
  • angular和百度地图的结合实例代码
  • 强大的 angular 表单验证功能详细介绍
  • angularjs中判断ng-repeat是否迭代完的实例
  • angularjs仿苹果滑屏删除控件
  • 如何构建angularjs工程
  • AngularJS项目中如何实现按需加载js文件?
  • angular2创建项目需要多久
  • angular创建项目时 ng new A 就出现了以下问题
  • 如何搭建一个Angular4.0程序
  • 如何用AngularJS构建管理后台
  • 如何压缩的 angular cli 构建的angular2 应用
  • angular-cli创建的项目在ie中打不开页面
  • 为什么angular2使用systemjs作为构建工具
  • angular2 项目写好了怎么发布出去
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved