图片加载器

  • file-loader —D (把图片解析成文件输出)
  • url-loader —D (把比较小的图片解析成 Base64,提高页面加载速度,如果图片小于 100kb 作为 base64 输出,大于 100kb 会自动调用 file-loader 打包成文件输出)
  • html-withimg-loader —D (识别 html 页面中引入的图片)

file-loader 和 url-loader 区别:

  1. url-loader依赖file-loader
  2. 当使用url-loader加载图片,图片大小小于上限值,则将图片转base64字符串,;否则使用file-loader加载图片,都是为了提高浏览器加载图片速度。
  3. 使用url-loader加载图片比file-loader更优秀

JS 加载器

babel (JS 编译器,编译成所有浏览器都支持的代码 )

  • babel-loader -D ( babel 和 webpack 的一个桥梁,解析 JS 代码)
  • @babel/core -D ( babel 的核心模块)
  • @babel/preset-env -D (主要是把 es6 转换成 es5的插件的集合)
  • core-js@3 (安装在生产环境 相当于 babel-poliyfill 解析更高版本的 js)
  • @babel/plugin-proposal-class-properties -D (处理类草案的语法)
  • @babel/plugin-proposal-decorators -D (处理装饰器)
  • @babel/plugin-transform-runtime(调用 @babel/runtime) @babel/runtime(减少冗余的代码)
  1. /***
  2. * 需要配置 .babelrc 文件
  3. *
  4. */
  5. {
  6. // 预设(插件的集合) 从上往下执行
  7. "presets": [
  8. ["@babel/preset-env",{
  9. "useBuiltIns": "usage", // entry usage 优化 不是转化所有的 api,而是用到那个就转化哪一个
  10. "corejs": 3 // 转化 es6 中高版本的 api
  11. }]
  12. ],
  13. // 一个一个的插件 从上往下执行
  14. "plugins": [
  15. "@babel/plugin-transform-runtime", // 依赖于 @babel/runtime
  16. // 使用legacy: true模式时,@babel/plugin-proposal-class-properties必须在loose模式下使用以支持@babel/plugin-proposal-decorators。
  17. ["@babel/plugin-proposal-decorators", { "legacy": true }], // "loose" : true 此值必须为 true
  18. // loose boolean,默认为false。 何时true,将编译类属性以使用赋值表达式而不是Object.defineProperty。
  19. ["@babel/plugin-proposal-class-properties", { "loose" : true }]
  20. ]
  21. }

webpack.config.js 配置文件

  1. // 配置文件
  2. const path = require('path');
  3. const {CleanWebpackPlugin} = require('clean-webpack-plugin');
  4. const HtmlWebpackPlugin = require('html-webpack-plugin')
  5. module.exports = {
  6. // 入口
  7. entry: {
  8. index: './src/index.js',
  9. },
  10. // 出口
  11. output: {
  12. // filename: 'index.js',
  13. filename: '[name].js',
  14. path: path.resolve(__dirname,"dist")
  15. },
  16. // 加载机
  17. module: {
  18. rules: [
  19. // css 加载机
  20. {
  21. test:/\.css$/,
  22. // [] {} ''
  23. use: ['style-loader','css-loader']
  24. },
  25. // less 加载器
  26. {
  27. test:/\.less$/,
  28. use: ['style-loader', 'css-loader', 'less-loader']
  29. },
  30. // img 加载器
  31. // {
  32. // test:/\.(jpg|jpeg|png|gif)$/,
  33. // use: {
  34. // loader: 'file-loader' ,
  35. // options: {
  36. // // 修改打包后的目录及文件名
  37. // name:'img/[name].[ext]'
  38. // }
  39. // }
  40. // },
  41. { // 图片小于 100kb 使用 url-loader ,
  42. test:/\.(jpg|jpeg|png|gif)$/,
  43. use: {
  44. loader: 'url-loader' , // 如果图片小于 100kb 作为 base64 输出,大于 100kb 会自动调用 file-loader 打包成文件输出
  45. options: {
  46. limit: 100 * 1024 , //100kb
  47. outputPath: 'img',
  48. // publicPath:'http://www.zhufeng.peixun/img'
  49. }
  50. }
  51. },
  52. {
  53. test:/\.(eot|svg|ttf|woff|woff2)$/,
  54. use: {
  55. loader: 'file-loader',
  56. }
  57. },
  58. // js 加载机
  59. {
  60. test: /\.js$/,
  61. use: 'babel-loader',
  62. include:path.resolve(__dirname,'src'), // 需要编译的 js 文件目录
  63. exclude:/node_modules/, // 排除需要编译的 js 文件目录
  64. },
  65. ]
  66. },
  67. // 服务器
  68. devServer: {
  69. port: 8080,
  70. compress: true, //是否压缩代码
  71. open:true,
  72. hot:true,
  73. // 插件
  74. plugins: [
  75. new CleanWebpackPlugin(), // 清空输出目录
  76. new HtmlWebpackPlugin({
  77. template: './index.html',
  78. filename: 'index.html',
  79. hash: true,
  80. }),
  81. ],
  82. }