详解webpack+es6+angular1.x项目构建


Posted in Javascript onMay 02, 2017

技术栈概述

ES2015(ES6)

大名ES2015,顾名思义是 ECMAScript 在2015年6月正式发布的一套标准。小名ES6,意为ECMAScript第六次变更。(JavaScript 是 ECMAScript 规范的一种实现)。如今已慢慢替代ES5,成为JS主流的开发规范,新增很多语法糖,大大提高开发效率。

webpack

详解webpack+es6+angular1.x项目构建

一款模块化的构建工具,对ES6的构建更加友好,不详细介绍了。

angular

一款MV*框架,本次用的是angular的1.6.4版本,即angular1.x版本中的最高版,也可以看作是2的过渡版吧。

eslint

ESLint是一个QA工具,用来避免低级错误和统一代码的风格。尤其是多人开发的情境下,规范代码,统一风格是非常重要的。即便每个人负责自己的模块,在实际执行的时候也难免有交集。eslint简单的讲,就是让自己少犯错,也让队友更容易的看懂你的代码。

本项目,选择的是ESlint的推荐配置,唯一注意的是全局变量中把angular的关键词加上。因为用到了es7的async等东西,除了webpack里babel的配置要到位,eslint里面也要配置相关解析,即:

module.exports = {
 "env": {
  "browser": true,
  "commonjs": true,
  "es6": true
 },
 "extends": "eslint:recommended",
 "parserOptions": {
  "sourceType": "module"
 },
 "globals": {
  "angular": true// angular关键词
 },
 "parser": "babel-eslint", // 解析es7
 "rules": {
  "no-console": 0,
  "quotes": [
   "error",
   "single"
  ]
 }
};

eslint是很灵活的,可以自己按需配置,本项目都是用的官方推荐配置。

项目结构

详解webpack+es6+angular1.x项目构建

commonComponents

公共组件目录,放一些二次封装的table等等'片段式'的html。

components

页面组件目录,因为是单页面应用,这里面放置的也就是各个页面了,把每个页面封装成'大'组件,里面由各自的html和'小'组件拼接而成。

config

路由,URL等等可配置的管理目录。

css

项目的公用样式目录。具体到组件的样式,会在各个组件里面具体写。比如login组件。

详解webpack+es6+angular1.x项目构建

image

图片目录。所有图片统一在这里管理。

server

服务目录。对项目的一些公用服务进行封装,比如二次封装http服务。这个目录,还可以细分,比如将angular的provider,service,value等等再进行划分。

项目入口

app.js

import 'babel-polyfill';
import angular from 'angular';
import uiRouter from 'angular-ui-router';
import components from './components';
import services from './server'
import commonComponents from './commonComponents';
import appRouter from './config/app.router';
import './css/main.less';
import style from './app.less';

let appComponent = {
  restrict: 'E',
  template: require('./app.html'),
  controller: function () {
    this.class = style;
  },
  controllerAs: 'app'
};

export default angular.module('sass', [uiRouter, components, services, commonComponents])
  .config(appRouter)
  .component('app', appComponent)
  .name;

除了引入angular,还引入了ui-router,因为原生的路由,不支持视图的嵌套。components, services, commonComponents是各自组建服务的汇总,前面已介绍。

写一个页面组件

下面以登陆页面为例。一个组件页面由4个文件组成,分别是index.js(此页面组件的出口,也是其余逻辑,样式的入口)

import loginCtrl from './login'
import tem from './login.html';

export default angular.module('login', [])
 .component('login', {
  template: tem,
  controller: loginCtrl
 })
 .name;

login.js(页面的业务逻辑在这里)

import url from '../../config/system.js';

class loginCtrl {
  static $inject = ['http'];
  constructor(http) {
    [this.http, this.name] = [http, `login`];
    this.str = `str${this.name}`;
  }
  login() {
     this.http.get({userName: 'link', userPassword: '123456'}, url.login, (data) => {
        console.info("success!")
     });  
  }
}
export default loginCtrl;

这个类主要完成的业务就是发送一个登陆http请求,这里的http是二次封装的一个服务,与注入原生依赖无异,有两种注入方式,一种是上边的在class中调用静态方法。即static $inject = ['http'];

另一种是loginCtrl.$inject = ['http'];(class不存在变量提升,确保写在class定义之后)

login.less(跟次登陆页面相关的样式,不贴代码了)。这样就写好了一个页面组件,由index.js输出出去,输出到哪里呢?

统一管理页面组件

在刚刚components目录下写好的login页面组件目录的同级,建立一个index.js,作用是用来统一管理组件页面。即:

import login from './login';
import register from './register';

export default angular.module('components', [
  login,
  register
]).name;

然后再将这个页面输出到最开始的app.js。即,app.js中引入的components。其他同理,将服务,过滤器等等都统一以相关文件管理汇总起来,再由入口文件引入。

类似于一种树形的结构:

详解webpack+es6+angular1.x项目构建

以上,就简单的构建好了一个webpack+es6+angular1.x的项目。

项目地址参考:https://github.com/jiwenjiang/angularSeed

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
jQueryMobile之Helloworld与页面切换的方法
Feb 04 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
Jun 28 Javascript
简单封装js的dom查询实例代码
Jul 08 Javascript
JS制作图形验证码实现代码
Oct 19 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 Javascript
值得分享和收藏的xmlplus组件学习教程
May 05 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
vue-router的钩子函数用法实例分析
Oct 26 Javascript
Vue+ElementUI table实现表格分页
Dec 14 Javascript
基于javascript的无缝滚动动画1
Aug 07 Javascript
jQuery Tree Multiselect使用详解
May 02 #jQuery
bootstrap的常用组件和栅格式布局详解
May 02 #Javascript
Vuejs实现带样式的单文件组件新方法
May 02 #Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 #Javascript
老生常谈js-react组件生命周期
May 02 #Javascript
js 用于检测类数组对象的函数方法
May 02 #Javascript
使用Bootstrap打造特色进度条效果
May 02 #Javascript
You might like
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
python 算法 排序实现快速排序
2012/06/05 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
python字符串中的单双引
2017/02/16 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
Python多进程原理与用法分析
2018/08/21 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Python如何定义有可选参数的元类
2020/07/31 Python
python 制作磁力搜索工具
2021/03/04 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
《问银河》教学反思
2014/02/19 职场文书
高中课程设置方案
2014/05/28 职场文书
施工员岗位职责
2015/02/10 职场文书
简历自荐信范文
2015/03/09 职场文书
门店店长岗位职责
2015/04/14 职场文书
Django框架中模型的用法
2022/06/10 Python
vscode内网访问服务器的方法
2022/06/28 Servers