• webpack的使用 一


    目录

    初体验

    开发环境配置

    打包样式资源

    打包HTML资源

    打包图片资源

    打包其他资源

    开发devServer 在module中增加 devServer配置项

    开发环境配置(整合版)

    初体验

    创建相关文件夹与文件(build与src文件加与index.js)

    运行指令

    a)开发环境指令:

    webpack ./src/index.js -o ./build/built.js --mode=development
    webpack就会以./src/index.js为入口文件开始打包,打包后输出到./build/built.js整体打包环境,是开发环境

    b)生产环境指令:

    webpack ./src/index.js -o ./build/built.js --mode=production
    做的都是一样的,环境是生产环境

    c)当配置文件写好后,可以直接使用webpack指令进行打包

    index.js: webpack入口起点文件

     2. 结论:
      1. webpack能处理js/json资源,不能处理css/img等其他资源
      2. 生产环境和开发环境将ES6模块化编译成浏览器能识别的模块化~
      3. 生产环境比开发环境多一个压缩js代码。

    开发环境配置

    打包样式资源

    1. /*
    2. webpack.config.js webpack的配置文件
    3. 作用: 指示 webpack 干哪些活(当你运行 webpack 指令时,会加载里面的配置)
    4. 所有构建工具都是基于nodejs平台运行的~模块化默认采用commonjs。
    5. */
    6. // resolve用来拼接绝对路径的方法
    7. const { resolve } = require('path');
    8. module.exports = {
    9. // webpack配置
    10. // 入口起点
    11. entry: './src/index.js',
    12. // 输出
    13. output: {
    14. // 输出文件名
    15. filename: 'built.js',
    16. // 输出路径
    17. // __dirname nodejs的变量,代表当前文件的目录绝对路径
    18. path: resolve(__dirname, 'build')
    19. },
    20. // loader的配置
    21. module: {
    22. rules: [
    23. // 详细loader配置
    24. // 不同文件必须配置不同loader处理
    25. {
    26. // 匹配哪些文件
    27. test: /\.css$/,
    28. // 使用哪些loader进行处理
    29. use: [
    30. // use数组中loader执行顺序:从右到左,从下到上 依次执行
    31. // 创建style标签,将js中的样式资源插入进行,添加到head中生效
    32. 'style-loader',
    33. // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
    34. 'css-loader'
    35. ]
    36. },
    37. {
    38. test: /\.less$/,
    39. use: [
    40. 'style-loader',
    41. 'css-loader',
    42. // 将less文件编译成css文件
    43. // 需要下载 less-loader和less
    44. 'less-loader'
    45. ]
    46. }
    47. ]
    48. },
    49. // plugins的配置
    50. plugins: [
    51. // 详细plugins的配置
    52. ],
    53. // 模式
    54. mode: 'development', // 开发模式
    55. // mode: 'production'
    56. }

    打包HTML资源

    1. /*
    2. loader: 1. 下载 2. 使用(配置loader)
    3. plugins: 1. 下载 2. 引入 3. 使用
    4. */
    5. const { resolve } = require('path');
    6. const HtmlWebpackPlugin = require('html-webpack-plugin');
    7. module.exports = {
    8. entry: './src/index.js',
    9. output: {
    10. filename: 'built.js',
    11. path: resolve(__dirname, 'build')
    12. },
    13. module: {
    14. rules: [
    15. // loader的配置
    16. ]
    17. },
    18. plugins: [
    19. // plugins的配置
    20. // html-webpack-plugin
    21. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
    22. // 需求:需要有结构的HTML文件
    23. new HtmlWebpackPlugin({
    24. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
    25. template: './src/index.html'
    26. })
    27. ],
    28. mode: 'development'
    29. };

    打包图片资源

    1. const { resolve } = require('path');
    2. const HtmlWebpackPlugin = require('html-webpack-plugin');
    3. module.exports = {
    4. entry: './src/index.js',
    5. output: {
    6. filename: 'built.js',
    7. path: resolve(__dirname, 'build')
    8. },
    9. module: {
    10. rules: [
    11. {
    12. test: /\.less$/,
    13. // 要使用多个loader处理用use
    14. use: ['style-loader', 'css-loader', 'less-loader']
    15. },
    16. {
    17. // 问题:默认处理不了html中img图片
    18. // 处理图片资源
    19. test: /\.(jpg|png|gif)$/,
    20. // 使用一个loader
    21. // 下载 url-loader file-loader
    22. loader: 'url-loader',
    23. options: {
    24. // 图片大小小于8kb,就会被base64处理
    25. // 优点: 减少请求数量(减轻服务器压力)
    26. // 缺点:图片体积会更大(文件请求速度更慢)
    27. limit: 8 * 1024,
    28. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs
    29. // 解析时会出问题:[object Module]
    30. // 解决:关闭url-loader的es6模块化,使用commonjs解析
    31. esModule: false,
    32. // 给图片进行重命名
    33. // [hash:10]取图片的hash的前10位
    34. // [ext]取文件原来扩展名
    35. name: '[hash:10].[ext]'
    36. }
    37. },
    38. {
    39. test: /\.html$/,
    40. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
    41. loader: 'html-loader'
    42. }
    43. ]
    44. },
    45. plugins: [
    46. new HtmlWebpackPlugin({
    47. template: './src/index.html'
    48. })
    49. ],
    50. mode: 'development'
    51. };

    打包其他资源

    1. const { resolve } = require('path');
    2. const HtmlWebpackPlugin = require('html-webpack-plugin');
    3. module.exports = {
    4. entry: './src/index.js',
    5. output: {
    6. filename: 'built.js',
    7. path: resolve(__dirname, 'build')
    8. },
    9. module: {
    10. rules: [
    11. {
    12. test: /\.css$/,
    13. use: ['style-loader', 'css-loader']
    14. },
    15. // 打包其他资源(除了html/js/css资源以外的资源)
    16. {
    17. // 排除css/js/html资源
    18. exclude: /\.(css|js|html|less)$/,
    19. loader: 'file-loader',
    20. options: {
    21. name: '[hash:10].[ext]'
    22. }
    23. }
    24. ]
    25. },
    26. plugins: [
    27. new HtmlWebpackPlugin({
    28. template: './src/index.html'
    29. })
    30. ],
    31. mode: 'development'
    32. };

    开发devServer 在module中增加 devServer配置项

    1. // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器~~)
    2. // 特点:只会在内存中编译打包,不会有任何输出
    3. // 启动devServer指令为:npx webpack-dev-server
    4. devServer: {
    5. // 项目构建后路径
    6. contentBase: resolve(__dirname, 'build'),
    7. // 启动gzip压缩
    8. compress: true,
    9. // 端口号
    10. port: 3000,
    11. // 自动打开浏览器
    12. open: true
    13. }

    开发环境配置(整合版)

    1. const { resolve } = require('path');
    2. const HtmlWebpackPlugin = require('html-webpack-plugin');
    3. module.exports = {
    4. entry: './src/js/index.js',
    5. output: {
    6. filename: 'js/built.js',
    7. path: resolve(__dirname, 'build')
    8. },
    9. module: {
    10. rules: [
    11. // loader的配置
    12. {
    13. // 处理less资源
    14. test: /\.less$/,
    15. use: ['style-loader', 'css-loader', 'less-loader']
    16. },
    17. {
    18. // 处理css资源
    19. test: /\.css$/,
    20. use: ['style-loader', 'css-loader']
    21. },
    22. {
    23. // 处理图片资源
    24. test: /\.(jpg|png|gif)$/,
    25. loader: 'url-loader',
    26. options: {
    27. limit: 8 * 1024,
    28. name: '[hash:10].[ext]',
    29. // 关闭es6模块化
    30. esModule: false,
    31. outputPath: 'imgs'
    32. }
    33. },
    34. {
    35. // 处理html中img资源
    36. test: /\.html$/,
    37. loader: 'html-loader'
    38. },
    39. {
    40. // 处理其他资源
    41. exclude: /\.(html|js|css|less|jpg|png|gif)/,
    42. loader: 'file-loader',
    43. options: {
    44. name: '[hash:10].[ext]',
    45. outputPath: 'media'
    46. }
    47. }
    48. ]
    49. },
    50. plugins: [
    51. // plugins的配置
    52. new HtmlWebpackPlugin({
    53. template: './src/index.html'
    54. })
    55. ],
    56. mode: 'development',
    57. devServer: {
    58. contentBase: resolve(__dirname, 'build'),
    59. compress: true,
    60. port: 3000,
    61. open: true
    62. }
    63. };

  • 相关阅读:
    SprringMVC拦截器
    金融期货和期权等品种权限
    VUE响应式
    市级奖项+1,持安获「创业北京」创业创新大赛优秀奖!
    mongodb开启副本集功能
    4.方法操作实例变量 对象的行为
    代码随想录二刷day50
    1-前端基本知识-HTML
    关于我在uni-app练手中遇到的坑
    【HDU No. 5057】序列操作 Argestes and Sequence
  • 原文地址:https://blog.csdn.net/csdssdn/article/details/126177507