webpack4用法总结

1. webpack学习之entry,output

entry: {
    vendor:['jquery'],
    commons:["./common/util.a.js","./common/util.b.js"],
    main:"./index.js"
},
output:{
    filename:"./[name].[chunkhash:8].js", //    path: __dirname + '/out',
    publicPath: ""   //静态资源公共路径
},

entry : 可以设置为字符串,数组,或者对象,作者在这里用常用的对象形式,main一般作为js入口文件,vendor一般放第三方库和项目依赖,commons一般放一些util文件等。
output :entry设置几个入口,这边就会有几个出口文件,设置多个文件出口,可以后面加上hash,如果想输出到不用文件夹,给entry的key加上文件夹名称即可,例如:test/commons: [...]

2. webpack学习之插件

new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery'
}),
// 拷贝第三方js库到out文件夹下面
new CopyWebpackPlugin([
  {
    from: path.resolve(__dirname+'/src/external.js'),
    to: './'
    // ignore: [ '*.js' ]  //忽略某一部分文件
  }
]),
new ExtractTextPlugin({
  filename: './index.[chunkhash:8].',
  allChunks: true,
  disable: false
}),
new OptimizeCSSAssetsPlugin({
  assetNameRegExp: /index\.[a-z 0-9]{8}\.css$/g,
  cssProcessor: require('cssnano'),
  cssProcessorOptions: { discardComments: { removeAll: true } },
  canPrint: false
}),
new CleanWebpackPlugin(['*'], {
  root: __dirname + '/out',
  verbose: true,
  dry: false,
}),
new HtmlWebpackPlugin({
  template: './index.html'
})

只是为了说明插件作用,上面代码实例没有顺序,使用时如果顺序有问题,可能会导致构建报错,插件的说明只是说了大概作用,具体使用,还是要到npm 具体了解。
ProvidePlugin : webpack配置ProvidePlugin后,在使用时将不再需要import和require进行引入,直接使用即可。比如: $('.text').text('测试')
CopyWebpackPlugin : 讲一个文件直接拷贝到某个位置,比如讲第三方sdk 或者 某些流量检测文件直接拷贝到项目中使用。
HotModuleReplacementPlugin: 热部署插件,文件改变后,浏览器会自动刷新
NamedModulesPlugin :这个插件的作用是在热加载时直接返回更新文件名,而不是文件的id。
ExtractTextPlugin : 该插件的主要是为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象。
HtmlWebpackPlugin:一、为html文件中引入的外部资源如script、link动态添加每次compile后的hash,防止引用缓存的外部文件问题。二、可以生成创建html入口文件,比如单页面可以生成一个html文件入口,配置N个html-webpack-plugin可以生成N个页面入口。
OptimizeCSSAssetsPlugin :匹配到out文件夹中css进行压缩。
CleanWebpackPlugin : //每次构建之前,都将上一次构建的文件夹删除,再生成新的。

3. webpack之optimization

optimization: {
    //common 插件
    splitChunks:{
      chunks: "all",//同时分割同步和异步代码,推荐。
      minSize: 0,
      minChunks: 1, //最小引入次数
      maxAsyncRequests: 5, //按需加载最大请求次数为5的所有模块就行拆分到一个单独的代码块中
      maxInitialRequests: 3, //初始化加载最大请求次数为3的所有模块就行拆分到一个单独的代码块中
      name: true,
      //缓存组,将多次引用的模块test 缓存到
      cacheGroups:{
        //  开发模式下,缓存jquery等第三方库。
        // jquery:{
        //   test:'jquery', //要写test设置项,不然会打包工程下所有的js文件
        //   chunks:'initial',
        //   name:'jquery',
        //   enforce:true
        // }
        default: {
          minChunks: 2,
          priority: -20,
          reuseExistingChunk: true,
        },
        // 生产模式下,打包entry的代码。
        //打包重复使用的代码,//打包第三方类库
        vendor: {
          name: 'vendor',
          chunks: 'initial',
          minChunks: 2,
          maxInitialRequests: 5, 
          minSize: 0, 
        },
        commons: {
          name: "commons",
          chunks: "initial",
          minChunks: Infinity
        }
      }
    }
},

这里就不多赘述了,关键解释在上面代码实例中

4. webpack之devServer

devServer: {
    contentBase: path.join(__dirname, ""), //注意这边路径不要写太详细,会导致部分文件重新构建,页面不刷新
    watchContentBase: true,
    //因为热更新使用的是内存 默认资源是保存在内存中的 需要使用publishpath制定相对路径
    port: 8077,
    hot: true, //热更新
    hotOnly: false,
    inline: true,
    historyApiFallback: true, //跳转页面
    openPage: './index.html', //默认打开的页面
    open: true, //自动打开页面,
    clientLogLevel: "none", //阻止打印那种搞乱七八糟的控制台信息
    allowedHosts:[], //允许访问的服务器
    proxy: {
      '/api': 'http://localhost:3000'  //ajax 访问代理
    },
    watchOptions: {
      poll: true
    }
}

关键解释在上面代码实例中
代码在github上,需要的同学,可以clone到本地学习,还有多页面打包方法在github上,感兴趣的可以去看看。
本文作者原创,仅供学习交流使用,转载需注明出处。

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

推荐阅读更多精彩内容