二、webpack高阶学习(sourcemap, web Works, externals, tree-shaking...)

目录

1. sourcemap

2. devServer

3.模块热替换与热加载

4.eslint

5. 模块解析

6.externals

7.依赖图

8.postcss和css模块

9.web Works

10.typescript

11.多页面环境搭建

12.tree-shaking

13.sideEffects 

14.非离线环境运行

15.Shimming

16.全局exports

17.Polyfills


1. sourcemap

将生成后的代码映射到源文件当中

1)eval

设置devtool:'eval'

使用默认的eval模式,将每个module封装到eval里面包裹起来,在末尾会追加注释 //@sourceURL

2)devtool:'source-map'

生成一个sourceMap文件

3)devtool:'hidden-source-map'

和source-map一样,但不会在bundle末尾追加注释

4)devtool:'inline-source-map'

生成一个dataurl形式的SourceMap

5)devtool:'eval-source-map'

每个module会通过eval()来执行,并且生成一个dataurl形式的SourceMap

6)devtool:'cheap-source-map'

生成一个没有列信息的SourceMap文件,不包含loader的SourceMap

7)devtool:'cheap-module-source-map' (开发推荐)

生成一个没有列信息的SourceMap文件,同时loader的sourcemap被简化为只包含对应行数的

注意:生产环境一般不会开启SourceMap

原因:1. 有暴露代码的风险

           2. 生产环境追求更小更轻量的bundle

2. devServer

 devServer: {
    static: path.resolve(__dirname, './dist'),
    //压缩
    compress: true,
    port: 3000,
    // 让其他人能够访问这个服务
    host: '0.0.0.0',
    // 代替任何404的静态资源响应
    historyApiFallback: true,
    headers: {
      'X-Access-Token': 'abc123'
    },
    //代理
    proxy: {
      '/api': 'http://localhost:9000'
    },
    // https: true
    http2: true,
  },

3.模块热替换与热加载

模块热替换(HMR-hot-module replacement)在应用程序运行过程中,替换,添加或删除模块,而无需重新加载整个页面

热加载:文件更新时,自动刷新我们的服务与页面

devServer: {
    hot: true,
    liveReload: true
  }

4.eslint

用来扫描代码是否符合规范的工具

npm i eslint -D

npx eslint --init

 npm i webpack webpack-cli webpack-dev-server html-webpack-plugin babel-loader eslint-webpack-plugin @babel/core -D  

配置

const HtmlWebpackPlugin = require('html-webpack-plugin')
const ESLintPlugin = require('eslint-webpack-plugin')

module.exports = {
  mode: 'development',

  entry: './src/app.js',

  plugins: [
    new HtmlWebpackPlugin(),
    new ESLintPlugin(),
  ],

  devServer: {
    client: {
      // 将页面的覆盖层去掉
      overlay: false,
    },
  },

  module: {
    rules: [
      {
        test: /\.js$/,
        use: ['babel-loader'],
      },
    ],

  },
}

5. 模块解析

webpack通过resolves实现了模块之间的依赖和引用。resolver帮助webpack从每个require/import语句中找到需要引入的bundle的模块代码

commonjs使用的是module.export  require

es6使用的是import export default

路径简化,extensions当遇到同命名的文件时,优先选择extensions中的后缀的文件

const path = require('path')
module.exports = {
  mode: 'development',
  entry: './src/app.js',
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    },
    extensions: ['.json', '.js', '.vue']
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值