常用配置参数

  1. module.exports = {
  2. context: path.resolve(__dirname, '../'),
  3. entry: {
  4. app: './src/main.js'
  5. },
  6. output: {
  7. path: path.resolve(__dirname, '../dist'),
  8. filename: '[name].js',
  9. publicPath: '/'
  10. },
  11. resolve: {
  12. extensions: ['.js', '.vue', '.json'],
  13. alias: {
  14. vue$: 'vue/dist/vue.esm.js',
  15. '@': resolve('src')
  16. }
  17. },
  18. module: {
  19. rules: []
  20. },
  21. plugins: {},
  22. devtool: 'cheap-module-eval-source-map',
  23. devServer: {}
  24. };
  • context : 基础目录,绝对路径,用于从配置中解析入口起点 (entry point) 和加载器 (loader)。
  • 默认使用当前目录,但是推荐在配置中传递一个值。这使得你的配置独立于 CWD(current working directory)。
  • entry : 起点或是应用程序的起点入口。从这个起点开始,应用程序启动执行。如果传递一个数组,那么数组的每一项都会执行。
  • output : 位于对象最顶级键(key),包括了一组选项,指示 webpack 如何去输出、以及在哪里输出你的「bundle、asset 和其他你所打包或使用 webpack 载入的任何内容」
  • filename : 输出 bundle 的名称。[name]:入口名称;[id]:内部 chunk id;[hash]:动态生成唯一 hash 值;[chunkhash]:每个 chunk 内容的 hash;
  • publicPath : 指在 runtime(运行时) 或 loader(加载器载入时) 所创建的每个 URL 的前缀。
  • path : 输出文件的 绝对路径
  • resolve : 配置 webpack 如何寻找模块对应的文件
  • alias : 配置别名把原来导入路径映射成一个新的导入路径
  • extensions : 在导入语句没带文件后缀时,webpack 会自动带上后缀去尝试访问文件是否存在。extensions 用于配置在尝试过程中用到的后缀列表。默认:['.js', '.json']
  • module.rules : 配置对应文件的加载规则,即:使用哪种 loaders 去加载对应的文件
  • devtool : 对打包的文件生成对应的 sourcemap
  • eval : 每个 module 会封装到 eval 里包裹起来执行,并且会在末尾追加注释 //@ sourceURL.
  • source-map : 生成一个 SourceMap 文件.
  • hidden-source-map : 和 source-map 一样,但不会在 bundle 末尾追加注释.
  • inline-source-map : 生成一个 DataUrl 形式的 SourceMap 文件.
  • eval-source-map : 每个 module 会通过 eval()来执行,并且生成一个 DataUrl 形式的 SourceMap.
  • cheap-source-map : 生成一个没有列信息(column-mappings)的 SourceMaps 文件,不包含 loader 的 sourcemap(譬如 babel 的 sourcemap)
  • cheap-module-source-map : 生成一个没有列信息(column-mappings)的 SourceMaps 文件,同时 loader 的 sourcemap 也被简化为只包含对应行的。
  • webpack 不仅支持这 7 种,而且它们还是可以任意组合上面的 eval、inline、hidden 关键字
  • 在 vue-cli 中,开发环境推荐:cheap-module-eval-source-map。生产环境推荐:source-map
  • plugins : 拓展 webpack 功能
  • devServer : 提供虚拟服务器,让我们进行开发和调试。需要安装对应插件 webpack-dev-server

常用 Loaders

  1. module: {
  2. rules: [
  3. {
  4. test: /\.css$/,
  5. use: [
  6. { loader: 'style-loader' },
  7. {
  8. loader: 'css-loader',
  9. options: {
  10. modules: true
  11. }
  12. }
  13. ]
  14. },
  15. {
  16. test: /\.css$/,
  17. loader: 'css-loader',
  18. options: {
  19. modules: true
  20. }
  21. }
  22. ];
  23. }
  • 常用配置
  • test : 通过正则的方式匹配对应的文件
  • use : 数组的方式使用多个加载器
  • loader : 加载器的名称
  • options : 对应加载器的配置项,每个加载器都有自己的配置项
  • include : 指定哪些文件需要加载
  • exclude : 指定不要加载哪些文件
  • enforce : 加载器的执行顺序,不设置为正常执行。可选值 pre | post 前 | 后。多个的时候默认数组从后向前
  • 常用加载器
  • html-loader : 将 HTML 文件导出编译为字符串,可供 js 识别的其中一个模块
  • css-loader : 解析 css 文件中代码
  • style-loader : 将 css 模块作为样式导出到 DOM 中
  • less-loader : 加载和转义 less 文件
  • sass-loader : 加载和转义 sass/scss 文件
  • postcss-loader : 使用 postcss 加载和转义 css/sss 文件
  • url-loader : 多数用于加载图片资源,超过文件大小显示则返回 data URL。内置了 file-loader,建议使用这个加载器用来加载一些静态文件,例如图片、字体文件等等
  • babel-loader : 加载 ES6+ 代码后使用 Babel 转义为 ES5 后浏览器才能解析
  • typescript-loader : 加载 Typescript 脚本文件
  • vue-loader : 加载和转义 vue 组件
  • angualr2-template--loader : 加载和转义 angular 组件
  • react-hot-loader : 动态刷新和转义 react 组件中修改的部分,基于 webpack-dev-server 插件需先安装,然后在 webpack.config.js 中引用 react-hot-loader

常用插件

HtmlWebpackPlugin : 是依据一个简单的模板,帮助生成最终的 Html5 文件,这个文件中自动引用了打包后的 JS 文件。每次编译都在文件名中插入一个不同的哈希值。[详细参考](https://www.npmjs.com/package/html-webpack-plugin

  1. new HtmlWebpackPlugin({
  2. filename: 'index.html',
  3. template: 'index.html',
  4. inject: true
  5. });
  • filename : 文件名
  • template : 对应的模板
  • inject : 打包文件插入的位置。false不插入,true插入尾部,head插入头部,body插入到 body 里
  • favicon : favicon 的路径
  • CopyWebpackPlugin : 在 webpack 中拷贝文件和文件夹,一般用于将不需要打包的静态文件 copy 到我们最终打包的文件目录下
  1. new CopyWebpackPlugin([
  2. {
  3. from: path.resolve(__dirname, '../static'),
  4. to: path.resolve(__dirname, '../dist/static'),
  5. ignore: ['.*']
  6. }
  7. ]);
  • from : 源目录
  • to : 目标目录
  • ignore : 忽略拷贝指定的文件
  • webpack.HotModuleReplacementPlugin : 开启 HMR,在应用程序运行时交换,添加或删除模块,而无需完全重新加载
  • webpack.NamedModulesPlugin : 当开启 HMR 的时候使用该插件会显示模块的相对路径,建议用于开发环境。
  • 作用:由于引入了一个新模块,使得打包过程中部分模块的模块 ID 发生了改变。而模块 ID 的改变,直接导致了包含这些模块的 chunk 内容改变,进而导致 chunkHash 的改变。因此需要找到一种和顺序无关的模块 ID 命名方式
  • webpack.HashedModuleIdsPlugin : 该插件会根据模块的相对路径生成一个四位数的 hash 作为模块 id, 建议用于生产环境
  • webpack.NoEmitOnErrorsPlugin : 跳过编译时出错的代码并记录,使编译后运行时的包不会发生错误。
  • webpack.DefinePlugin : 允许你创建一个在编译时可以配置的全局常量。这可能会对开发模式和发布模式的构建允许不同的行为非常有用。
  • webpack.optimize.ModuleConcatenationPlugin : 启用作用域提升,作用是让代码文件更小、运行的更快
  • uglifyJsPlugin : 用来对 js 文件进行压缩,从而减小 js 文件的大小,加速 load 速度。该插件会拖慢构建的速度,所以建议在生产环境下开启。
  • ExtractTextPlugin : 主要是为了抽离 css 样式,防止将样式打包在 js 中引起页面样式加载错乱的现象
  • OptimizeCSSPlugin : 压缩、混淆优化 css,解决 ExtractTextPlugin css 重复问题
  • webpack.optimize.CommonsChunkPlugin : 用来提取第三方库和公共模块,避免首屏加载的 bundle 文件或者按需加载的 bundle 文件体积过大,从而导致加载时间过长。详细用法请点击

devServer 配置

  • hot : 热模块更新作用。即修改模块后,保存会自动更新,页面不用刷新呈现最新的效果。和 webpack.HotModuleReplacementPlugin (HMR) 这个插件不是一样功能。HMR 这个插件是真正实现热模块更新的。而 devServer 里配置了 hot: true , webpack 会自动添加 HMR 插件。所以模块热更新最终还是 HMR 这个插件起的作用。
  • host : 主机名,默认 localhost
  • prot : 端口号,默认 8080
  • historyApiFallback : 设置为 true 的时候,我们页面错误不会出现 404。当我们搭建 spa 应用时非常有用,它使用的是 HTML5 History Api,任意的跳转或 404 响应可以指向 index.html 页面。详细参考
  • compress : true ,开启虚拟服务器时,为你的代码进行压缩。加快开发流程和优化的作用
  • contentBase : 你要提供哪里的内容给虚拟服务器用。这里最好填 绝对路径
  • open : true 时自动打开浏览器
  • overlay : true ,在浏览器上全屏显示编译的 errors 或 warnings。默认 false
  • quiet : true,则终端输出的只有初始启动信息。 webpack 的警告和错误是不输出到终端的
  • publicPath : 配置了 publicPath 后, url = ‘主机名’ + ‘publicPath 配置的’ +
  • ‘原来的 url.path’。这个其实与 output.publicPath 用法大同小异。
  • output.publicPath 是作用于 js, css, img 。而 devServer.publicPath 则作用于请求路径上的。
  • proxy : 配置服务代理。详细参考
  • watchOptions : 一组自定义的监听模式,用来监听文件是否被改动过。详细参考

webpack 入门和常用插件的使用的更多相关文章

  1. 关于webpack 以及 webpack配置和常用插件的学习记录 (1)

    主要概念: Entry :   webpack的入口,构建的第一步从entry开始. Output :   输出,经过webpack处理后的得到最终想要的代码. Loader :   模块转换工具,把 ...

  2. 关于webpack 以及 webpack配置和常用插件的学习记录 (2) ------ devServer

    DevServer: devserver会启动一个http服务器用于服务网页请求,接收webpack发出的文件变化的信号.通过websocket协议自动刷新网页,实现实时预览. 安装: npm i w ...

  3. maven入门与常用插件使用

    maven不仅仅是一款管理jar包的工具,还可以

  4. 前端项目自动化构建工具——Webpack入门教程

    参考资料:https://www.webpackjs.com/(中文文档)   https://www.webpackjs.com/(官方文档) 首先有必要说明一下,本文侧重讲解webpack基本配置 ...

  5. webpack 打包过程及常用插件

    前言 要理解webpack 首先明白三个概念:module,chunk,bundles,即输入,中间态,输出. chunk: This webpack-specific term is uesd in ...

  6. webpack 介绍 & 安装 & 常用命令

    webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...

  7. webpack4配置详解之常用插件分享

    前言 继上一次webpack的基础配置分享之后,本次将分享一些工作中项目常用的配置插件.也会包含一些自己了解过觉得不错的插件,如有分析不到位的,欢迎纠错,嗯,这些东西文档都有,大佬可绕过. Wepac ...

  8. webpack入门详解

    webpack入门详解(基于webpack 3.5.4  2017-8-22) webpack常用命令: webpack --display-error-details    //执行打包 webpa ...

  9. webpack入门(1)

    webpack入门(1) 源码戳这里 ps:每个案例对应相应的demo,例如"案例1"对应"demo1" 一.webpack基本功能及简单案例 安装webpac ...

随机推荐

  1. Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.qingmu.mybaitsplus.mapper.UserMapper' available:

    java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...

  2. Latex 调整断字,连接符,取消断词/断字

    latex使用了处理断字的算法去自动的找断字的地方,而且latex会调整单词间距,使得文章看起来不会显得疏密不一致.大多数情况下,这些算法都工作得很好.但是因为断字的算法是根据某种规则来处理单词的断字 ...

  3. Logstash连接Elasticsearch异常

    1.背景 elasticsearch集群默认配置启动ok,logstash连接向里面发数据ok. 2.出现问题 修改elasticsearch.yml中的cluster.name,改为 esabc 然 ...

  4. python 基础笔记-函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段·. 好处为: 一可以把程序中相对独立的功能模块抽取出来,减少重读代码的编写: 二是将来可以以重复的使用这些功能模块    定义一个函数 ...

  5. 第二阶段团队冲刺(个人)——One

    今天的任务:修改登录界面.将原有的登录界面全部改掉,仿照千图网,做界面.

  6. 讲课专用——线段树——BSS

    题目链接:http://codevs.cn/problem/3981/ 题解: 线段树求GSS模板题 一.一段长的区间的 GSS 有三种情况:>1 完全在左子区间>2 完全在右子区间> ...

  7. nRF51822 看门狗和OTA (无线升级功能)的尴尬笔记

    很久没有记笔记了.今天要记点东西,不然以后又忘记了. 随着时代的发展,现在的SDK已经是13.0了.蓝牙5.0也就来了.废话就少说了,记笔记吧. 两年前搞过nRF51822 的无线升级功能,那时候用的 ...

  8. Gamma阶段第六次scrum meeting

    每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91(持续完成) # ...

  9. STL源码剖析 阅读笔记

    结构图:

  10. 快速排序详解(C语言/python)

    快速排序详解 介绍: 快速排序于C. A. R. Hoare在1960年提出,是针对冒泡排序的一种改进.它每一次将需要排序的部分划分为俩个独立的部分,其中一个部分的数比的数都小.然后再按照这个方法对这 ...