• 实习打怪之路:webpack概念【入口、输出、装载机、插件、模块】(引自官网)


    目录

    官网:Concepts | webpack

    概念

    入口

    输出

    装载机

    插件

    模式

    浏览器兼容性

     目录展示

    总代码


    官网:Concepts | webpack

    概念

    从本质上讲,webpack是现代 JavaScript 应用程序的静态模块打包器当 webpack 处理你的应用程序时,它会在内部从一个或多个入口点构建一个依赖关系图,然后将项目所需的每个模块组合成一个或多个bundles(捆绑) ,这些 bundles 是提供内容的静态资产。

    1. node 环境
    2. npm init -y 初始化项目
    3. 生成了pageage.json文件夹
    4. 在项目文件夹里建 src文件 添加入口文件 index.js
    5. webpack核心模块
    6. entry: 入口
    7. output: 出口 输出
    8. module: 配置loader loader处理非js的文件打包
    9. plugins:插件
    10. mode:模式 development 开发模式 production 生产模式
    11. webpack 安装
    12. 全局安装
    13. cnpm i -g webpack webpack-cli
    14. 局部暗转
    15. cnpm install --save-dev webpack webpack-cli
    16. cnpm i -D webpack webpack-cli
    17. webpack ./src/index.js -o ./dist/main.js --mode=development
    18. 未设置webpack.config.js文件中入口和出口时,在命令行可以执行用来打包
    19. loader安装
    20. 安装 css-loader
    21. cnpm i -D css-loader style-loader
    22. 安装 less-loader
    23. cnpm i -D less-loader less
    24. 安装 babel-loader
    25. cnpm install babel-loader @babel/core @babel/preset-env -D
    26. webpack-dev-server 开发服务器
    27. 安装 cnpm i -D webpack-dev-server
    28. 插件 html-webpack-plugin
    29. 安装 cnpm i -D html-webpack-plugin

    从 4.0.0 版本开始,webpack 不需要配置文件来打包你的项目。尽管如此,它的可配置性令人难以置信,可以更好地满足您的需求。

    要开始,您只需要了解它的核心概念

    本文档旨在对这些概念进行高级概述,同时提供指向特定概念的详细用例的链接。

    为了更好地理解模块捆绑器背后的想法以及它们如何在幕后工作,请查阅以下资源:

    入口

    入口点指示webpack应该使用哪个模块来开始构建其内部依赖图。Webpack 将找出入口点(直接和间接)依赖的其他模块和库。

    默认情况下,它的值为,但您可以通过在 webpack 配置中./src/index.js设置属性来指定不同(或多个)入口点。例如:entry

    webpack.config.js

    1. module.exports = {
    2. entry: './path/to/my/entry/file.js',
    3. };

    输出

    output属性告诉 webpack在哪里发出它创建的以及如何命名这些文件。它默认./dist/main.js用于主输出文件和./dist任何其他生成文件的文件夹。

    output您可以通过在配置中指定一个字段来配置该过程的这一部分:

    webpack.config.js

    1. const path = require('path');
    2. module.exports = {
    3. entry: './path/to/my/entry/file.js',
    4. output: {
    5. path: path.resolve(__dirname, 'dist'),
    6. filename: 'my-first-webpack.bundle.js',
    7. },
    8. };

    在上面的示例中,我们使用output.filenameoutput.path属性来告诉 webpack 我们的包的名称以及我们希望将它发送到哪里。如果您想知道在顶部导入的路径模块,它是用于操作文件路径的核心Node.js 模块。

    装载机

    开箱即用,webpack 只理解 JavaScript 和 JSON 文件。加载器允许webpack处理其他类型的文件并将它们转换为可以被您的应用程序使用并添加到依赖关系图中的有效模块。

     警告

    webpack 的一项特殊功能是能够处理import任何类型的模块,例如.css文件,其他捆绑程序或任务运行程序可能不支持这些模块。我们认为该语言的这种扩展是有必要的,因为它允许开发人员构建更准确的依赖关系图。

    在高层次上,加载器在你的 webpack 配置中有两个属性:

    1. test属性标识应该转换哪个文件或哪些文件。
    2. use属性指示应使用哪个加载器进行转换。

    webpack.config.js

    1. const path = require('path');
    2. module.exports = {
    3. output: {
    4. filename: 'my-first-webpack.bundle.js',
    5. },
    6. module: {
    7. rules: [{ test: /\.txt$/, use: 'raw-loader' }],
    8. },
    9. };

    rules上面的配置为具有两个必需属性的单个模块定义了一个属性:testuse. 这告诉 webpack 的编译器以下内容:

    require()“嘿,webpack 编译器,当您在/import语句中遇到解析为 '.txt' 文件的路径时,请在将其添加到包之前使用它进行转换。”raw-loader

    警告

    重要的是要记住,在你的 webpack 配置中定义规则时,你是在module.rules和 not下定义它们rules。为了您的利益,如果操作不正确,webpack 会警告您。

    警告

    请记住,在使用正则表达式匹配文件时,您不能引用它。ie/\.txt$/'/\.txt$/'or不同"/\.txt$/"。前者指示 webpack 匹配任何以 .txt 结尾的文件,后者指示 webpack 匹配具有绝对路径 '.txt' 的单个文件;这可能不是您的意图。

    在加载程序部分中包含加载程序时,您可以检查进一步的自定义。

    插件

    虽然加载器用于转换某些类型的模块,但可以利用插件来执行更广泛的任务,如包优化、资产管理和环境变量注入。

    小费

    查看插件接口以及如何使用它来扩展 webpack 的功能。

    为了使用插件,您需要将require()其添加到plugins数组中。大多数插件都可以通过选项进行定制。由于您可以在配置中出于不同目的多次使用插件,因此您需要通过使用new操作符调用它来创建它的实例。

    webpack.config.js

    1. const HtmlWebpackPlugin = require('html-webpack-plugin');
    2. const webpack = require('webpack'); //to access built-in plugins
    3. module.exports = {
    4. module: {
    5. rules: [{ test: /\.txt$/, use: 'raw-loader' }],
    6. },
    7. plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
    8. };

    在上面的示例中,html-webpack-plugin为您的应用程序生成了一个 HTML 文件,并自动将您生成的所有捆绑包注入到该文件中。

    在 webpack 配置中使用插件很简单。但是,有许多用例值得进一步探索。在此处了解有关它们的更多信息

    模式

    通过将mode参数设置为或development,您可以启用与每个环境对应的 webpack 的内置优化。默认值为。productionnoneproduction

    1. module.exports = {
    2. mode: 'production',
    3. };

    浏览器兼容性

    Webpack 支持所有符合 ES5 的浏览器(不支持 IE8 及以下版本)。WebpackPromise需要import()和require.ensure(). 如果你想支持旧版浏览器,你需要在使用这些表达式之前加载一个 polyfill 。
     

     目录展示

    总代码

    1. const path = require('path')
    2. const HtmlWebpackPlugin = require('html-webpack-plugin')
    3. module.exports = {
    4. entry: './src/index.js', //配置入口文件
    5. output: {
    6. //打包后的文件名
    7. filename: 'main.js',
    8. // 打包后的路径,必须是绝对路径,不设置时默认是 dist/main.js
    9. path: path.resolve(__dirname, './dist')
    10. },
    11. // 模式 开发模式 生产模式
    12. mode: 'development',
    13. // mode: 'production',
    14. module: {
    15. rules: [{
    16. test: /\.css$/,
    17. // use 里面有顺序,从后往前执行,先模块化再引入
    18. use: ['style-loader', {
    19. loader: 'css-loader',
    20. options: {
    21. esModule: false,
    22. url: true
    23. }
    24. }]
    25. }, {
    26. test: /\.less$/,
    27. // use 里面有顺序,从后往前执行,先模块化再引入
    28. use: ['style-loader', 'css-loader', 'less-loader']
    29. },
    30. {
    31. test: /\.js$/,
    32. exclude: /node_modules/,
    33. use: {
    34. loader: 'babel-loader',
    35. options: {
    36. presets: ['@babel/preset-env']
    37. }
    38. }
    39. },
    40. {
    41. test: /\.png|.jpeg$/i,
    42. // use 里面有顺序,从后往前执行,先模块化再引入
    43. use: {
    44. loader:'url-loader',
    45. options:{
    46. esModule:false,
    47. }
    48. }
    49. }
    50. ]
    51. },
    52. devServer: {
    53. open: true, //自动打开浏览器
    54. port: 3000, //端口的配置
    55. hot: true, //热加载
    56. compress: true,
    57. // static:'./src'
    58. },
    59. plugins: [
    60. new HtmlWebpackPlugin({
    61. filename: 'index.html',
    62. template: './public/index.html'
    63. })
    64. ]
    65. }

  • 相关阅读:
    spring boot+ vue位置信息大数据综合管理平台源码
    Ext Direct 开发全介绍
    python学习笔记——元祖
    【开源】SpringBoot框架开发房屋出售出租系统
    Webfunny大版本改造(mysql迁移至clickhouse)
    玩转代码|分享一些实用的Vue 前端代码(三)
    SOA(面向服务架构)是什么?
    百度apollo自动驾驶planning代码学习-Apollo\modules\planning\common\IndexedList类代码详解
    Java Web Start 指南
    el-table 设置固定宽度弹框
  • 原文地址:https://blog.csdn.net/qq_51066068/article/details/125871235