webapck html-loader实现资源复用

1、安装

npm i html-loader --save-dev

2、项目目录

layout文件夹下的footer.html文件为:

<script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js
"></script>

layout文件夹下的head-common.html文件为:

<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="keywords" content="MMall,happymmall,MMall电商,网上购物,网上商城,数码产品,手机,笔记本,相机,手表,耳机,电商视频,电商教程,电商源码下载">
<meta name="description" content="一个提供数码通讯、手机、电脑、家居百货、服装服饰、母婴、图书、食品等数万种优质商品,最优质、最便捷的网上购物平台。">
<link rel="dns-prefetch" href="//cdn.bootcss.com">
<link rel="dns-prefetch" href="//s.happymmall.com">
<link rel="dns-prefetch" href="//img.happymmall.com">
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?bc210cd22928076d28296716d9dfcf01";
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(hm, s);
})();
</script>

login.html文件为(已包含配置):

<!DOCTYPE html>
<html>
    <%= require(‘html-loader!./layout/head-common.html‘)  %>
    <body>
        <%= require(‘html-loader!./layout/footer.html‘)  %>
    </body>

</html>

3、webpack.config.js文件为:

//处理html模板
var htmlWebpackPlugin = require(‘html-webpack-plugin‘);
//处理共用、通用的js
var webpack = require(‘webpack‘);
//css单独打包
var ExtractTextPlugin = require("extract-text-webpack-plugin");

// 获取html-webpack-plugin参数的方法
var getHtmlConfig = function(name, title){
    return {
        template    : ‘./src/view/‘ + name + ‘.html‘,
        filename    : ‘view/‘ + name + ‘.html‘,
        favicon     : ‘./favicon.ico‘,
        title       : title,
        inject      : true,
        hash        : true,
        chunks      : [‘common‘, name]
    };
};

module.exports = {
    //    entry: ‘./src/app.js‘,
    entry: {
        //通用模块
        ‘common‘: [‘./src/page/common/index.js‘],
        ‘login‘: [‘./src/page/login/index.js‘],
        ‘index‘: [‘./src/page/index/index.js‘]
    },
    output: {
        path: __dirname + ‘/dist‘,
        filename: ‘js/[name].js‘
    },
    //将外部变量或者模块加载进来
    externals: {
        ‘jquery‘: ‘window.jQuery‘
    },
    module: {
        loaders: [{
                test: /\.js$/,
                //以下目录不处理
                exclude: /node_modules/,
                //只处理以下目录
                include: /src/,
                loader: "babel-loader",
                //配置的目标运行环境(environment)自动启用需要的 babel 插件
                query: {
                    presets: [‘latest‘]
                }
            },
            //css 处理这一块
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: [
                        //‘style-loader‘,
                        {
                            loader: ‘css-loader‘,
                            options: {
                                //支持@important引入css
                                importLoaders: 1
                            }
                        },
                        {
                            loader: ‘postcss-loader‘,
                            options: {
                                plugins: function() {
                                    return [
                                        //一定要写在require("autoprefixer")前面,否则require("autoprefixer")无效
                                        require(‘postcss-import‘)(),
                                        require("autoprefixer")({
                                            "browsers": ["Android >= 4.1", "iOS >= 7.0", "ie >= 8"]
                                        })
                                    ]
                                }
                            }
                        }
                    ]
                })
            },
            //less 处理这一块
            {
                test: /\.less$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: [
                        //‘style-loader‘,
                        {
                            loader: ‘css-loader‘,
                            options: {
                                //支持@important引入css
                                importLoaders: 1
                            }
                        },
                        {
                            loader: ‘postcss-loader‘,
                            options: {
                                plugins: function() {
                                    return [
                                        //一定要写在require("autoprefixer")前面,否则require("autoprefixer")无效
                                        require(‘postcss-import‘)(),
                                        require("autoprefixer")({
                                            "browsers": ["Android >= 4.1", "iOS >= 7.0", "ie >= 8"]
                                        })
                                    ]
                                }
                            }
                        },
                        ‘less-loader‘
                    ]
                })
            },
//            //处理html模板
//            {
//                test: /\.html$/,
//                use: {
//                    loader: ‘html-loader‘
//                }
//            },
            //处理图片
            {
                test: /\.(png|jpg|gif|svg)$/i,
                loaders: [
                    //小于8k的图片编译为base64,大于10k的图片使用file-loader
                    ‘url-loader?limit=8192&name:img/[name]-[hash:5].[ext]‘,
                    //图片压缩
                    ‘image-webpack-loader‘
                ]

            }
        ]
    },
    plugins: [
        //html模板处理
//        new htmlWebpackPlugin({
//            template: ‘index.html‘,
//            filename: ‘index.html‘,
//            inject:true,
//            hash:true,
//            chunks:[‘common‘,‘index‘]
//        }),
        new htmlWebpackPlugin(getHtmlConfig(‘index‘, ‘首页‘)),
        new htmlWebpackPlugin(getHtmlConfig(‘login‘, ‘登录页‘)),
        // 独立通用模块到js/common.js
        new webpack.optimize.CommonsChunkPlugin({
            //公共块的块名称
            name: ‘common‘,
            //生成的文件名
            filename: ‘js/common.js‘
        }),
        //css 单独打包到文件
        new ExtractTextPlugin(‘css/[name].css‘)
    ]
}

注:html-loade已经在login.html中配置好了。

4、执行命令&查看效果

npm run webpack

时间: 2024-08-03 01:59:52

webapck html-loader实现资源复用的相关文章

Android Loader 技术的简单实用

从Android3.0开始,Android SDK提供了Loader技术,使用Loader技术可以很容易进行数据的异步加载.Loader技术为我们提供的核心类有: LoaderManager:可以通过Activity或者的Fragment的getLoaderManager()方法得到LoaderManager,用来对Loader进行管理,一个Activity或者Fragment只能有一个LoaderManager. LoaderManager.LoaderCallbacks:用于同LoaderM

构建多页面应用——静态资源的处理

在之前的系列文章中,我已经介绍了如何用webpack实现多页面应用的js,html,css的处理.今天就主要介绍如何处理静态资源,在web开发中最常见的静态资源就是图片. 图片的引用方式 而因为在web中,图片有两种主要的引入方式,第一种是<img src="...">,第二种是backgorund-image: url(...).前者在html中使用,后者在css中使用. web开发中的图片处理 图片常见的类型有jp(e)g,png,gif,包括现在普遍使用的svg以及w

揭秘webpack loader

前言 Loader(加载器) 是 webpack 的核心之一.它用于将不同类型的文件转换为 webpack 可识别的模块.本文将尝试深入探索 webpack 中的 loader,揭秘它的工作原理,以及如何开发一个 loader. 一.Loader 工作原理 webpack 只能直接处理 javascript 格式的代码.任何非 js 文件都必须被预先处理转换为 js 代码,才可以参与打包.loader(加载器)就是这样一个代码转换器.它由 webpack 的 loader runner 执行调用

开发过程中资源限制的挑战

1.什么是资源限制 资源限制是指在进行并发编程时,程序执行速度受限于计算机硬件资源或软件资源. 例如,服务器的带宽只有2MB/s,某个资源的下载速度是1MB/s,系统启动10个 线程下载资源,下载速度不会变成10MB/s,所以在进行并发编程时,要考虑这些资源的 限制.硬件资源限制有带宽的上传/下载.硬盘读写速度和CPU的处理速度.软件资源限制 有数据库的连接数和socket连接数等. 2.资源限制引发的问题 在并发编程中,将代码执行速度加快的原则是将代码中串行执行的部分变成并发执行,但是 如果将

使用Loader实时查询本地数据库用法

在看Android的文档时,看到了这么一个东西: Loader 究竟是什么东西呢? Introduced in Android 3.0, loaders make it easy to asynchronously load data in an activity or fragment. Loaders have these characteristics: 1.They are available to every Activity and Fragment.  //支持Activity和F

Android 深入理解Loader机制 让APP轻装上阵

本文简书同步发布,谢谢关注. -http://www.jianshu.com/p/385327e35711 Android开发者都经历过APP UI开发不当 会造成overDraw,导致APP UI渲染过慢,但是很多人却没听过overLoad,overLoad一般是由于开发者在主线程操作耗时操作,导致程序变慢 甚至出现的anr的现象,那么android早已为这种现象提供完美的解决方案,就是今天给大家说的Loader机制. 一 Loader Android的装载器(loader)是从Android

3.资源限制

什么是资源限制 资源限制是指在并发编程是,程序的执行速度受限于计算机硬件资源和软件资源. 如硬件: 上传和下载的速度.磁盘读写速度.CPU的处理速度.软件:有数据库的连接.socket连接数. 资源限制的引发的问题 并发编程中,将代码执行速度加快的原则是将代码中串行执行的部分变成并发执行,但是如果将某段创新的代码并发执行,因受限于资源,仍然在串行执行.这是程序不仅不会加快执行,反而会更慢,因为伤心文切换和资源调度的时间. 如 之前看到一段程序使用多线程在办公网并发地下载和处理数据时,导致cpu利

Laya资源加载小记

Laya.Loader负责资源的加载逻辑,被LoaderManager管理. Laya支持多种类型资源加载,也支持自定义类型加载.不同类型的加载方式可能不同. Laya.Loader缓存已经被加载过得资源,减少资源重复加载. 提供清理资源接口,由LoaderManager封装接口. 部分资源加载包含多步加载,如Atlas和Font都包含文本下载和图片下载. 注意:Laya.loader是LoaderManager的实例,是Laya对外的通用加载接口.Laya.Loader由LoaderManag

webpack 中,loader、plugin 的区别

loader 和 plugin 的主要区别: loader 用于加载某些资源文件. 因为webpack 本身只能打包commonjs规范的js文件,对于其他资源例如 css,图片,或者其他的语法集,比如 jsx, coffee,是没有办法加载的. 这就需要对应的loader将资源转化,加载进来.从字面意思也能看出,loader是用于加载的,它作用于一个个文件上. plugin 用于扩展webpack的功能. 它直接作用于 webpack,扩展了它的功能.当然loader也是变相的扩展了 webp