前言:

为什么我们需要babel-loader?

因为我们有些旧版的浏览器(例如:IE)不支持ES5以上的语法,所以我们需要babel-loader来把我们写的ES6代码转化为ES5的代码。

如何使用babel-loader

@babel/preset-env 可以解析ES6 语法
但是如果想要解析 async - await 语法
则需要安装 @babel/plugin-transform-runtime

@babel/plugin-transform-runtime 依赖于 @babel/preset-env

npm install -D babel-loader @babel/core @babel/preset-env webpack npm install -D @babel/plugin-transform-runtime

  1. const path = require("path")
  2. const HtmlWebpackPulgin = require("html-webpack-plugin")
  3. module.exports = {
  4. mode: 'development',
  5. entry: './src/index.js',
  6. output: {
  7. filename: 'bundle.js',
  8. path: path.resolve(__dirname, './dist'),
  9. clean: true,
  10. assetModuleFilename: 'images/[contenthash][ext]'
  11. },
  12. devtool: 'inline-source-map',
  13. plugins: [
  14. new HtmlWebpackPulgin({
  15. template: './index.html',
  16. filename: 'app.html',
  17. inject: 'body'
  18. }),
  19. ],
  20. devServer: {
  21. static: './dist',
  22. hot: true,
  23. },
  24. module: {
  25. rules: [
  26. {
  27. // babel loader:把es6转换成es5,让低版本浏览器也能识别
  28. // @babel/core:babel的核心模块
  29. // @babel/preset-env webpack:babel的预设,一组babel插件的集合
  30. test: /\.js$/,
  31. // exclude排除不需要转移的文件
  32. exclude: /(node_modules|bower_components)/,
  33. use: {
  34. loader: 'babel-loader',
  35. options: {
  36. // presets预设
  37. presets: ['@babel/preset-env'],
  38. plugins: ['@babel/plugin-transform-runtime']
  39. }
  40. },
  41. ]
  42. },
  43. }

我们修改helloworld.js

  1. function getString(){
  2. return new Promise((resolve, reject)=>{
  3. setTimeout(()=>{
  4. resolve('helloworld')
  5. },1000)
  6. })
  7. }
  8. // 使用async - await 语法
  9. export async function helloworld(){
  10. let str = await getString()
  11. console.log(str);
  12. }
  13. // export function helloworld() {
  14. // getString().then(console.log('helloworld'))
  15. // }

成功打印
image.png
如果没有安装 @babel/plugin-transform-runtime
image.png