精华内容
下载资源
问答
  • webpack打包
    千次阅读
    2022-01-10 14:11:22

    1.1 webpack 是什么

    webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。 它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。

    1.2 webpack 五个核心概念

    1.2.1 Entry 入口(Entry)

    指示 webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图。

    1.2.2 Output 输出(Output)

    指示 webpack 打包后的资源 bundles 输出到哪里去,以及如何命名。

    1.2.3 Loader

    Loader 让 webpack 能 够 去 处 理 那 些 非 JavaScript 文 件 (webpack 自 身 只 理 解 JavaScript)

    1.2.4 Plugins 插件(Plugins)

    可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩, 一直到重新定义环境中的变量等。

    1.2.5 Mode

    在这里插入图片描述

    对于__dirname和__filename的解释

    __dirname,是一个成员,用来动态获取当前文件模块所属的绝对路径
    __filename,可以动态获取当前文件夹的绝对路径(包含文件名)

    点击跳转

    var path=require("path")
    module.exports={
        // 打包的入口配置 ""打包的路径
        entry:{
            index:"./src/index.js"//文件的路径
        },
        // 打包之后存放的位置
        output:{
            filename:'[name]-bundel.js',//打包之后的名字 [name]是原先的名字 index-bundel.js
            path:path.resolve(__dirname,"dist")
        }
    }
    

    装载机

    开箱即用,webpack 只理解 JavaScript 和 JSON 文件。装载机允许的WebPack处理其他类型的文件,并将其转换为有效的模块,可以通过您的应用程序消耗并添加到依赖关系图。

    在更高层面,在 webpack 的配置中,loader 有两个属性:
    test 属性,识别出哪些文件会被转换。
    use 属性,定义出在进行转换时,应该使用哪个 loader。
    webpack.config.js

    第 2 章:webpack 的初体验

    2.1 初始化配置

    1. 初始化 package.json 输入指令:

    2. npm init

    3. 下载并安装 webpack
      输入指令: npm install webpack webpack-cli -g
      npm install webpack webpack-cli -D

    2.2 编译打包应用

    在这里插入图片描述

    第 3 章:webpack 开发环境的基本配置

    3.1 创建配置文件

    1. 创建文件 webpack.config.js
    2. 配置内容如下
    /*
      index.js: webpack入口起点文件
    
      1. 运行指令:
        开发环境:webpack ./src/index.js -o ./build/built.js --mode=development
          webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./build/built.js
          整体打包环境,是开发环境
        生产环境:webpack ./src/index.js -o ./build/built.js --mode=production
          webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./build/built.js
          整体打包环境,是生产环境
    
       2. 结论:
        1. webpack能处理js/json资源,不能处理css/img等其他资源
        2. 生产环境和开发环境将ES6模块化编译成浏览器能识别的模块化~
        3. 生产环境比开发环境多一个压缩js代码。
    */
    // import './index.css';
    
    import data from './data.json';
    console.log(data);
    
    function add(x, y) {
      return x + y;
    }
    
    console.log(add(1, 2));
    

    3.2 打包样式资源

    在这里插入图片描述

    /*
      webpack.config.js  webpack的配置文件
        作用: 指示 webpack 干哪些活(当你运行 webpack 指令时,会加载里面的配置)
    
        所有构建工具都是基于nodejs平台运行的~模块化默认采用commonjs。
    */
    
    // resolve用来拼接绝对路径的方法
    const { resolve } = require('path');
    
    module.exports = {
      // webpack配置
      // 入口起点
      entry: './src/index.js',
      // 输出
      output: {
        // 输出文件名
        filename: 'built.js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build')
      },
      // loader的配置
      module: {
        rules: [
          // 详细loader配置
          // 不同文件必须配置不同loader处理
          {
            // 匹配哪些文件
            test: /\.css$/,
            // 使用哪些loader进行处理
            use: [
              // use数组中loader执行顺序:从右到左,从下到上 依次执行
              // 创建style标签,将js中的样式资源插入进行,添加到head中生效
              'style-loader',
              // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
              'css-loader'
            ]
          },
          {
            test: /\.less$/,
            use: [
              'style-loader',
              'css-loader',
              // 将less文件编译成css文件
              // 需要下载 less-loader和less
              'less-loader'
            ]
          }
        ]
      },
      // plugins的配置
      plugins: [
        // 详细plugins的配置
      ],
      // 模式
      mode: 'development', // 开发模式
      // mode: 'production'
    }
    
    

    3.3 打包 HTML 资源

    在这里插入图片描述

    /*
      loader: 1. 下载   2. 使用(配置loader)
      plugins: 1. 下载  2. 引入  3. 使用
    */
    const { resolve } = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      entry: './src/index.js',
      output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build')
      },
      module: {
        rules: [
          // loader的配置
        ]
      },
      plugins: [
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
          // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
          template: './src/index.html'
        })
      ],
      mode: 'development'
    };
    
    

    3.4 打包图片资源

    在这里插入图片描述

    const { resolve } = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      entry: './src/index.js',
      output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build')
      },
      module: {
        rules: [
          {
            test: /\.less$/,
            // 要使用多个loader处理用use
            use: ['style-loader', 'css-loader', 'less-loader']
          },
          {
            // 问题:默认处理不了html中img图片
            // 处理图片资源
            test: /\.(jpg|png|gif)$/,
            // 使用一个loader
            // 下载 url-loader file-loader
            loader: 'url-loader',
            options: {
              // 图片大小小于8kb,就会被base64处理
              // 优点: 减少请求数量(减轻服务器压力)
              // 缺点:图片体积会更大(文件请求速度更慢)
              limit: 8 * 1024,
              // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs
              // 解析时会出问题:[object Module]
              // 解决:关闭url-loader的es6模块化,使用commonjs解析
              esModule: false,
              // 给图片进行重命名
              // [hash:10]取图片的hash的前10位
              // [ext]取文件原来扩展名
              name: '[hash:10].[ext]'
            }
          },
          {
            test: /\.html$/,
            // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
            loader: 'html-loader'
          }
        ]
      },
      plugins: [
        new HtmlWebpackPlugin({
          template: './src/index.html'
        })
      ],
      mode: 'development'
    };
    
    

    3.5 打包其他资源

    const { resolve } = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      entry: './src/index.js',
      output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
          },
          // 打包其他资源(除了html/js/css资源以外的资源)
          {
            // 排除css/js/html资源
            exclude: /\.(css|js|html|less)$/,
            loader: 'file-loader',
            options: {
              name: '[hash:10].[ext]'
            }
          }
        ]
      },
      plugins: [
        new HtmlWebpackPlugin({
          template: './src/index.html'
        })
      ],
      mode: 'development'
    };
    
    

    3.6 devserver

    const { resolve } = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      entry: './src/index.js',
      output: {
        filename: 'built.js',
        path: resolve(__dirname, 'build')
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
          },
          // 打包其他资源(除了html/js/css资源以外的资源)
          {
            // 排除css/js/html资源
            exclude: /\.(css|js|html|less)$/,
            loader: 'file-loader',
            options: {
              name: '[hash:10].[ext]'
            }
          }
        ]
      },
      plugins: [
        new HtmlWebpackPlugin({
          template: './src/index.html'
        })
      ],
      mode: 'development',
    
      // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器~~)
      // 特点:只会在内存中编译打包,不会有任何输出
      // 启动devServer指令为:npx webpack-dev-server
      devServer: {
        // 项目构建后路径
        contentBase: resolve(__dirname, 'build'),
        // 启动gzip压缩
        compress: true,
        // 端口号
        port: 3000,
        // 自动打开浏览器
        open: true
      }
    };
    
    

    3.7 开发环境配置

    在这里插入图片描述

    /*
      开发环境配置:能让代码运行
        运行项目指令:
          webpack 会将打包结果输出出去
          npx webpack-dev-server 只会在内存中编译打包,没有输出
    */
    
    const { resolve } = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      entry: './src/js/index.js',
      output: {
        filename: 'js/built.js',
        path: resolve(__dirname, 'build')
      },
      module: {
        rules: [
          // loader的配置
          {
            // 处理less资源
            test: /\.less$/,
            use: ['style-loader', 'css-loader', 'less-loader']
          },
          {
            // 处理css资源
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
          },
          {
            // 处理图片资源
            test: /\.(jpg|png|gif)$/,
            loader: 'url-loader',
            options: {
              limit: 8 * 1024,
              name: '[hash:10].[ext]',
              // 关闭es6模块化
              esModule: false,
              outputPath: 'imgs'
            }
          },
          {
            // 处理html中img资源
            test: /\.html$/,
            loader: 'html-loader'
          },
          {
            // 处理其他资源
            exclude: /\.(html|js|css|less|jpg|png|gif)/,
            loader: 'file-loader',
            options: {
              name: '[hash:10].[ext]',
              outputPath: 'media'
            }
          }
        ]
      },
      plugins: [
        // plugins的配置
        new HtmlWebpackPlugin({
          template: './src/index.html'
        })
      ],
      mode: 'development',
      devServer: {
        contentBase: resolve(__dirname, 'build'),
        compress: true,
        port: 3000,
        open: true
      }
    };
    
    
    更多相关内容
  • 基于webpack4的一个针对vue基础项目的打包配置,对基础的vue项目进行简单的打包配置,可以支持less,scss,sass等css预编译,简单明了,教程:https://www.jianshu.com/p/81bfe6ba1c04
  • 本篇文章主要介绍了如何用webpack打包一个网站应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了webpack打包nodejs项目(前端代码),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了浅谈webpack打包之后的文件过大的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 本文主要记录了非模块化js如何使用webpack打包 模块化打包实现方式 webpack是模块打包工具,通过入口文件递归遍历其依赖图谱,绝对是打包神器。 bar.js export default function bar() { // } foo.js import ...
  • 主要介绍了webpack 打包文件体积过大解决方案(code splitting),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 使用webpack构建font-awesome或者bootstrap的时候,最常见的一个问题就是构建字体文件的问题。经常会出现无法找到字体文件的问题。下面就讲一下如何正确构建引入字体文件: 1. 首先安装依赖: 代码如下:npm install...
  • 刚开始用webpack,谈一谈解决webpack打包慢的问题的方法 技巧1 webpack在打包的时候第一次总是会做很长的准备工作,包括加载插件之类的。在刚接触webpack的时候总是webpack一下-测一下-改一下-再webpack一下,这种...
  • 下面小编就为大家分享一篇解决vue+webpack打包路径的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • webpack打包react项目的模版
  • webpack中css-loader的解析配置如下 { test: /\.(css|less)$/, exclude: path.resolve(__dirname, 'node_modules'), use: ['style-loader', 'css-loader', 'less-loader'] } 打包后在dist目录的发现没有css...
  • 使用webpack打包,最爽的事情莫过于可以直接require文件了,但是这 同时带来了一个问题,就是所有的文件整合到一起,那这一个包就太大了。 基于此:下面我们来了解下webpack的打包(主要是将如何将我们需要的内容...
  • 今天小编就为大家分享一篇解决在vue项目中webpack打包后字体不生效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要给大家介绍了在webpack打包后直接访问页面图片路径错误的解决方法,文中介绍的非常详细,对遇到这个问题的朋友们具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
  • webpack打包教程.zip webpack是最流行的前端自动化打包工具,今天来个他的教程
  • 主要介绍了vue webpack打包后图片路径错误的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • webpack 把我们所有的文件都打包成一个 JS 文件,这样即使你是小项目,打包后的文件也会非常大。下面就来讲下如何从多个方面进行优化。 去除不必要的插件 刚开始用 webpack 的时候,开发环境和生产环境用的是同一个 ...
  • 这几天写腾讯实习生 Mini 项目的时候用上了 React 全家桶,当然同时引入了 Webpack 作为打包工具。但是开发过程中遇到一个很棘手的问题就是,React 加上 React-Router、superagent、eventproxy 这些第三方轮子一共有...
  • 本文介绍了webpack打包node.js后端项目的方法,分享给大家,具体如下: 安装依赖 复制代码 代码如下: npm install –save-dev webpack babel-loader babel-preset-es2015 babel-preset-stage-0 webpack配置 ...
  • webpack是目前使用范围最广范,功能最强大的前端打包工具,是现在mvvm框架开发避不开少的工具。webpack是前端程序人员必须具备的技能,webpack在最近几年内前端必不可少的的技术。 任何形式的资源都可以被视为模块,...
  • 主要介绍了vue和webpack打包项目相对路径修改的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • webpackwebpack打包机制与源码解析2021.03.31:打包的代码分析文件在dist/myBuilt.js中
  • Webpack打包实例测试代码
  • 本文通过两种方法给大家介绍了webpack打包时排除其中一个css、js文件,或单独打包一个css、js文件的方法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 转眼已经是2019年,短短三四年时间,webpack打包工具成为了前端开发中必备工具,曾经一度的面试题都是问,请问前端页面优化的方式有哪些?大家也是能够信手拈来的说出缓存、压缩文件、CSS雪碧图以及部署CDN等等各种...
  • 偶然看见一篇文章讲 如何使用webpack打包koa app ,惊为天人,原来webpack也能打包后台。这在以前想都没想过。 关键问题 一:所有node_modules里的模块都不进行打包 webpack的核心功能是将引用的各个模块打到一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,816
精华内容 42,326
关键字:

webpack打包