【进阶系列】Webpack基础整理专题

1 模块化工具Webpack

1.1 概念简介

1.1.1 WebPack是什么

    1 一个打包工具

    2 一个模块加载工具

    3 各种资源都可以当成模块来处理

    4 网站 http://webpack.github.io/

        如今,越来越多的JavaScript代码被使用在页面上,我们添加很多的内容在浏览器里。如何去很好的组织这些代码,成为了一个必须要解决的难题。

        对于模块的组织,通常有如下几种方法:

    1 通过书写在不同文件中,使用script标签进行加载

    2 CommonJS进行加载(NodeJS就使用这种方式)

    3 AMD进行加载(require.js使用这种方式)

    4 ES6模块

 

思考:为什么只有JS需要被模块化管理,前台的很多预编译内容,不需要管理吗?

    基于以上的思考,WebPack项目有如下几个目标:

    • 将依赖树拆分,保证按需加载

    • 保证初始加载的速度

    • 所有静态资源可以被模块化

    • 可以整合第三方的库和模块

    • 可以构造大系统

        从下图可以比较清晰的看出WebPack的功能

Webpack功能示意图

1.1.2 WebPack的特点

    1 丰富的插件,方便进行开发工作

    2 大量的加载器,包括加载各种静态资源

    3 代码分割,提供按需加载的能力

    4 发布工具

1.1.3 WebPack的优势

    • webpack 是以 commonJS 的形式来书写脚本滴,但对 AMD/CMD 的支持也很全面,方便旧项目进行代码迁移。

    • 能被模块化的不仅仅是JS了。

    • 开发便捷,能替代部分 grunt/gulp 的工作,比如打包、压缩混淆、图片转base64等。

    • 扩展性强,插件机制完善,特别是支持 React 热插拔(见 react-hot-loader )的功能让人眼前一亮。


1.2 HJDev前端模块规划

Js合并的原则是:大小不能超过500KB

总体包括三类:

            Vendor类文件,第三方类库,命名规则是hj_vender_***.js,原则上同一个大框架的文件合并到一起,例如Angular、jQuery、mui等;

            Common类文件,自定义的通用类库,命名规则是hj_common_***.js,原则上目前所有自定义类库可以合并成一个文件,大小不超过500KB;

            各模块js文件,考虑到cssloader的样式替换原理,css样式文件不做合并;服务调用文件目前通用度比较低,各模块调用情况差异比较大,故也不做统一合并,而是合并到各模块js文件中打包压缩。


1.3 Angular模块模块化整改

1.3.1 Html文件整改

    1、删除所有Script标签引用的文件,改成在js文件中用require引用;

    2、增加dll文件引用;

    3、对于img标签中引用的相对路径的图片,改用angular参数绑定的形式引用;

1.3.2 js文件整改

    1、将angular、swiper等node.js管理的第三方类库采用require方式引用;

    2、将所引用的css文件、js文件、子模块html文件均用require方式引用;

    3、将自定义Angular模块进行模块化整改;

var loginModule = angular.module("login", ['hj_User', 'hj_Service', 'ui.router', "hj_Comment"]);

loginModule.name = "login";

module.exports = loginModule.name;

    4、对于路由策略中子模块html的引用方式,改用require方式引入,必要的时候考虑采用异步加载方式引入;

.state('lock', {                 

    //手势解锁登录页面

    url: '/lock.html',

//templateProvider:function($q) {

    //   var deferred = $q.defer();

    //   require.ensure(['./lock.html'], function(require) {

    //        var template = require('./../../html/account/lock.html');

    //        deferred.resolve(template);

    //   }, 'lock');

    //   return deferred.promise;

    //},

    template: require('./../../html/account/lock.html'),

    controller: require('./../public/hjCommon/geslock.js'),

    params:{

        loginSet:"",

        isLogin:""

    }

})

1.3.2.1 子模块js文件单独编写时require引用处理


1.3.3 css文件整改

1.3.3.1 background样式中url引用整改

        对于css样式,要求将background样式中url函数引用改成background-image:

        原来写法

background:url("../image/ img_03") no-repeat rightcenter;


        整改后写法:

background-image: url("../image/img_03.png");


1.3.3.2 background样式中空链引用删除

        css样式中有背景图引用了空链接,会导致报错,例如:

.right_noIcon{

    background: url('');

}

background-image:

url('');


解决方案:

            删除空链接引用;

1.3.4 webpack打包配置

        在webpack.config.js文件中,首先要引入html打包插件,然后进行html与js文件的配置:

var HtmlWebpackPlugin = require('html-webpack-plugin');

        在入口文件entry中如下配置,其中涉及子模块js逻辑写在另一个js文件的需要采用[]包含路径,:

//页面入口文件配置

entry: {

    home : './m/js/home/home.js',

    product:  './m/js/home/productIndex.js',

    userinfo: './m/js/asset/userInfoIndex.js',

    login: ['./m/js/account/login.js'],    },


在plugins一项中做如下配置:

    //Fund模块打包

    new HtmlWebpackPlugin(

    {

        //根据模板插入css/js等生成最终HTML

        //           favicon:'./src/img/favicon.ico', //favicon路径

        //生成的html存放路径,相对于path

        filename:'html/home/fundProductIndex.html',   

        //html模板路径

        template:'m/html/home/productIndex.html',   

        inject: true,    //允许插件修改哪些内容,包括head与body

        hash: true,    //为静态资源生成hash值


        //压缩HTML文件

        minify:{    

            removeComments: false,    //移除HTML中的注释

            collapseWhitespace: false    //删除空白符与换行符

        },

        chunks:['dll_angular','dll','common','product']

        }),


2 参考资料

前端js和css的压缩合并之gulp

http://www.tuicool.com/articles/3UnEZ36

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,465评论 0 21
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,831评论 0 1
  • webpack 介绍 webpack 是什么 为什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert阅读 6,673评论 2 71
  • 4.19《颠覆平庸》 彭小六 【day38 马克图布】 读的是什么书:《颠覆平庸》 阅读有效时间:30分钟 阅读中...
    马克图布了阅读 227评论 0 1
  • 在ARC-V即将结束之际,回过头来看看这个召唤方式的绝唱。 就不介绍灵摆的机制和什么的了直接开始。 首先我觉得最开...
    入离兽阅读 1,345评论 1 0

友情链接更多精彩内容