webpack 1.0 入门

1.什么是webpack

正如官网对webpack的描述,它是一种模块化加载器,当然也不仅仅限于此。某种程度上来说,可以代替某些gulp的功能,至少有些还是无法替代的。在webpack中所有的资源都会被视作模块来处理,为了应对这样的情况,webpack有对应的loader机制来处理,另外shim,plugins,和其他构建工具,一样一样的,更多的细节,需要你在实际的应用中慢慢去体会了。

2.webpack的使用方法

webpack认为一个项目(或者一个页面),总有一个入口文件,就像C语言中总有一个main函数一样。假设,我们创建两个文件./main.js和./query.js,并且将main.js做为我们项目的入口文件。
query.js

 module.exports = function(){
         var version = 1.0.0;
         console.log(version)
    }

main.js

var query = require('./query');
    query();

创建一个webpack.config.js文件

    var config = {
        entry:'./main.js',
        ouptut:{
            path:'./js'
            filename:'main.js'
        }
    }
    module.exports = config;

在你的终端上运行webpack即可,默认webpack命令就等于webpack --config webpack.config.js你也可以修改默认的配置文件的名字,像这样:webpack --config webpack.custom.js

3.webpack配置详解

entry####

entry属性做为可配置的入口,比如上面所写的./main.js。entry有三种写法,每一个入口可以称之为一个chunk。

1.如果为字符串,只会打包一个顺序依赖的模块,输出则根据output配置而定。
entry: __dirname + "/app/main.js"
2.如果为数组,只会打包一个顺序依赖的模块,合并到最后一个模块时导出,输出则根据output配置而定。
entry: [__dirname + "/app/temp.js",__dirname + "/app/main.js"]
3.如果为对象,则会根据入口打包多个顺序依赖的模块,key名会根据在output的配置输出。

    entry: {
        file1: __dirname + '/app/temp.js',
        file2: __dirname + '/app/main.js'
    }

output####

输出规则,在此对象中设置。

  1. path 设置输出的文件路径
  2. filename 设置输出文件名,filename可以有多种配置,比如main.js,[id].js,[name].js,[hash].js等
  3. publicPath 设置资源的访问路径
  4. library 设置模块导出的类名
  5. libraryTarget:'umd' 设置模块兼容模式,umd模式是兼容commonjs、AMD和CMD的。参数可以有commonjs和amd、cmd、umd可选。
  6. umdNamedDefine:true 同上

devtool####

将devtool设置为source-map,在开发调试阶段非常有用,它的模式非常多,可自行去搜索了解。

loader####

loader机制应该是webpack中非常重要的部分了,它是一系列资源的最终执行者。一般情况下,你可以访问:webpack loader来访问可用loader列表。
比如现在我想将.html类型的文件,当做一个模块来载入:
npm install raw-loader

    module:{
        loaders:[
            {
                test:/\.html$/,
                loader:'raw',
                exclude:/(node_modules)/
            }
        ]
    }

每一个loader都可以用一个对象来描述,test是你的匹配规则,loader是你要载入的loader,exclude是你在执行规则是想忽略的目录。

plugins####

webpack的插件机制也非常的重要,其内置了多种插件,比如混淆,压缩等等。插件列表可以访问:list of plugins
正常情况下可以使用官方自带的插件:

    new webpack.optimize.UglifyJsPlugin({
        compress: {
            warnings: false//
        }
    })

当然,我们也可以引入第三方插件,使用你的npm install吧。

resolve####

此配置可以对一些常用模块设置别名,比如a.js放置在./src/module/address/中,每次载入模块需要var a = require('./src/module/address/a');名字非长,如果设置别名了,只需要var a = require('a');

    resolve:{
        alias:{
            "RequestModel":path.resolve(__dirname,'src/lib/request.model')
        }
    },

还可以设置访问路径,以及模块载入后缀。

    resolve:{
        root:path.resolve(filePath,'/src'),
        extensions:['','.js']
    }

externals####

此项配置可以将某些库设置为外部引用,内部不会打包合并进去。

    externals:{
        jquery:'window.jQuery'
    }

具体解释一下,有的时候我们不希望把有些文件用webpack打包一起使用,而是想用script标签引入的方式使用如
<script scr="jquery.min.js"></script>
引入之后,此时会有window.jquery这个全部变量了,我们使用jquery就可以这样:
var $ = window.jQuery
但是我们希望可以用CMD、AMD等形式来使用jquery怎么办呢?如:
var $ = require('jquery')
可以使用externals来解决:

    externals:{
        jquery:'window.jQuery',
        jquery: true //jquery: 'jquery'一样
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,669评论 7 110
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,025评论 0 21
  • 学习流程 参考文档:入门Webpack,看这篇就够了Webpack for React 一. 简单使用webpac...
    Jason_Zeng阅读 3,106评论 2 16
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,135评论 7 35
  • 早上6点起床,热车…… 早餐是一杯水调豆浆,一个鸡蛋,半个白馒头…… 各种隧道,大雾,盘山险道,青山绿水间穿梭……...
    寒冰0601阅读 184评论 0 0