让前端飞Web前端之路webpack学习

【webpack】一步步的看webpack-3

2021-01-22  本文已影响0人  程序员佩奇

好啦,介绍完webpack到底是干什么的以后呢,我们需要进入正题了,这篇主要介绍webpack的几个重要的概念入口,出口loader,插件plugins,模式

入口(entry point)

出口(output)

对于单个入口起点,filename 会是一个静态名称。

filename: "bundle.js"

然而,当通过多个入口起点(entry point)、代码拆分(code splitting)或各种插件(plugin)创建多个 bundle,应该使用以下一种替换方式,来赋予每个 bundle 一个唯一的名称……

使用入口名称:

filename: "[name].bundle.js"

使用内部 chunk id

filename: "[id].bundle.js"

使用每次构建过程中,唯一的 hash 生成,可以指定hash生成的长度如:[hash:8]

filename: "[name].[hash].bundle.js"

使用基于每个 chunk 内容的 hash:

filename: "[chunkhash].bundle.js"

因为 hash 是项目构建的哈希值,项目中如果有些变动,hash 一定会变,比如说我改动了 utils.js 的代码,index.js 里的代码虽然没有改变,但是大家都是用的同一份 hash。hash 一变,缓存一定失效了,这样子是没办法实现 CDN 和浏览器缓存的。

其他配置项

总结:上面是webpack的最基础的配置,输入和输出,当然这里引入了一个chunk的概念,chunk表示一个文件,默认情况下webpack的输入是一个入口文件,输出也是一个文件,这个文件就是一个chunk,chunkId就是产出时给每个文件一个唯一标识id,chunkhash就是文件内容的md5值,name就是在entry中指定的key值。

module.exports = {
    entry: {
        collection: './src/main.js'     // collection为chunk的名字,chunk的入口文件是main.js
    },
    output: {
        path: './dist/js',
        filename: '[name].[chunkhash].[hash:8].js'   // 输出到dist/js目录下,以collection+chunk内容的md5值作为输出的文件名
    }
};  

以上输入输出会出现几个概念,下面做一下总结:

entry:{
    main:['./src/main.js','./src/test.js'],
    other:['./src.other.js']
},
output:{
    filename:"[name].bundle.js"
}

main.js中引入了gloabl.css;

loader

在更高层面,在 webpack 的配置中 loader 有两个目标:

模式

module.exports = {
  mode: 'production'
};

webpack --mode=production
选项 描述
development 会将 process.env.NODE_ENV 的值设为 development。启用 NamedChunksPlugin 和 NamedModulesPlugin。
production 会将 process.env.NODE_ENV 的值设为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 UglifyJsPlugin.
上一篇下一篇

猜你喜欢

热点阅读