zoukankan      html  css  js  c++  java
  • webpack配置

    先说说已有的几种模块加载方式

    script

    最原始的js文件加载方式,把每个文件作为一个模块

    <script src='a.js'></script>
    <script src='b.js'></script>

    commonJS

    用require方法同步加载依赖的模块,通过exports或module.exports导出要暴露的接口

    var a = require('a.js');
    a.doSomething();
    ...
    module.exports = b;

    AMD

    异步加载模块,声明模块的时候指定依赖,即依赖前置

    define(['a'], function(a) {
       a.doSomething();
       ...
       return b;   
    })

    ES6

    es6标准新增了import和export,原生浏览器端还没有实现此标准,因此需要通过babel来实现

    import a from 'a';
    
    a.doSomething();
    ...
    
    export b;

    webpack

    module.exports = {
        entry: {
            './public/scripts/bundle': './src/index.js'
        },
        output: {
            path: __dirname,
            publicPath: '/',
            filename: '[name].js'    //name对应entry里的key值
        },
        resolve: {
            extensions: ['', '.js', '.jsx']
        },
        module: {
            //webpack本身只能处理原生js模块,loader可以将各种类型资源转换为js模块供webpack处理
            loaders: [ 
                {
                    test: /.jsx?$/,
                    loader: 'babel',
                    query: {
                        presets: ['es2015', 'react', 'stage-2']
                    },
                    exclude: /node_modules/
                },
                {
                    test: /.scss$/,
                    loader: ExtractTextPlugin.extract('css!sass')
                }
            ]
        },
        plugins: [
            new ExtractTextPlugin('public/styles/bundle.css', {allChunks: true})
        ]
    }

    注意到在babel-loader中,指定了一些presets。因为babel 6不会自己加载所有内容,需要我们告诉它要加载哪些模块,es2015对应es6,react对应jsx。而stage系列是对es7一些提案的支持。数字越小则包含的功能越多,如stage-0包含了stage-1,stage-2,stage-3的所有功能加上额外的新功能,以此类推。其中

    stage-2支持transform-object-rest-spread,es6只支持数组的解构,而加上这个插件便可扩展到对象上,在redux中非常好用

    stage-3支持transform-async-to-generator,主要用来支持async和await

    既然各类型资源都可以看作模块来加载,各模块可以在js中通过require('mycssfile.css')来加载各自对应的css文件,然后style-loader将在head标签下创建style添加这些css内容。这样做的一个问题,就是可能会产生过多的style标签,我们可以使用ExtractTextPlugin插件将css全部抽离出来放到一个output里

    webpack还能实现强大的按需加载,解决因打包文件体积过大导致初始化很慢的问题。以后用到再更新

  • 相关阅读:
    MyCLI :一个支持自动补全和语法高亮的 MySQL/MariaDB 客户端
    pathlib:优雅的路径处理库
    MySQL索引连环18问
    Mysql 百万级数据迁移实战笔记
    强大的Json解析工具 Jsonpath 实战教程
    JavaScript 中的 Var,Let 和 Const 有什么区别
    【前端安全】从需求分析开始,详解前端加密与验签实践
    vue3开发企业级生鲜系统项目
    mysql随笔
    shiro相关Filter
  • 原文地址:https://www.cnblogs.com/coiorz/p/6509426.html
Copyright © 2011-2022 走看看