详解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 相关文章推荐
JavaScript 利用Cookie记录用户登录信息
Dec 08 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
js+html5操作sqlite数据库的方法
Feb 02 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
JS常用字符串方法(推荐)
Jan 15 Javascript
JQuery遍历元素的父辈和祖先的方法
Sep 18 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 Javascript
vue组件开发props验证的实现
Feb 12 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
mysql5详细安装教程
2007/01/15 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
python机器学习库xgboost的使用
2020/01/20 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
财务会计实习报告体会
2013/12/20 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
质量承诺书格式
2014/05/20 职场文书
党员民主评议个人总结
2014/10/20 职场文书
技能培训通讯稿
2015/07/18 职场文书
如何用python反转图片,视频
2021/04/24 Python
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL