首页 > 其他分享 >前端工程化学习笔记-02(webpack基础用法)

前端工程化学习笔记-02(webpack基础用法)

时间:2024-09-16 12:51:02浏览次数:14  
标签:02 index plugin loader webpack html 工程化 js

前端工程化学习笔记-02(webpack基础用法)

webpack基础用法

快速搭建一个简易的webpack项目

  • 使用npm init初始化一个项目;
mkdir webpack-demo
cd webpack-demo
npm init -y
  • 本地安装webpack;
npm install webpack webpack-cli --save-dev
  • 修改package.json文件
# 删除"main": "index.js",修改"scripts"

{
  "name": "webpack_study",
  "version": "1.0.0",
  "description": "webpack基础用法",
  "scripts": {
    "build": "webpack" 
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^5.94.0",
    "webpack-cli": "^5.1.4"
  }
}
  • 新增文件src/index.js;
function component() {
  const element = document.createElement('div');

  element.innerHTML = "Hello Webpack";

  return element;
}

document.body.appendChild(component());
  • 新增文件webpack.config.js;
const path = require('path');

module.exports = {
  // 入口(entry)
  entry: './src/index.js',
  // 输出(output)
  output: {
    // 指定输出文件名
    filename: 'main.js',
    // 指定输出目录
    path: path.resolve(__dirname, 'dist'),
  },
  // 告知webpack使用相应模式的内置优化
  // mode配置选项:'none' | 'development' | 'production'
  // 如果没有设置,webpack会给mode的默认值设置为production
   mode: 'development',
};
  • 运行打包命令;
npm run build
  • 在生成的dist文件夹下面新增一个index.html文件并引入main.js;;
 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8" />
     <title>快速搭建一个简易的webpack项目</title>
   </head>
   <body>
    <script src="main.js"></script>
   </body>
 </html>
  • 用浏览器打来该index.html文件;

在这里插入图片描述

loader的使用方法

  • 使用sass-loader、css-loader、style-loader处理Sass样式文件
# 安装loader

npm install css-loader style-loader sass sass-loader --save-dev
# webpack.config.js中使用loader

// 多个loader作用一个模块需要用数组形式且要注意顺序,自后往前
// webpack自定义loader规范:一个loader最好制作一件事
module: {
  rules:[
    {
      test: /\.scss$/,
      use: [
        { loader: 'style-loader' },
        {
          loader: 'css-loader',
          options: {
            modules: true,
          },
        },
        { loader: 'sass-loader' },
      ]
    }
  ]
  }
# 新增src/styles/index.scss文件

body {
    background:gray;
    text-align: center;
    font-size: 24px;
    color:#fff;
}

在这里插入图片描述

  • 使用url-loader处理图片
# 安装loader

npm install file-loader url-loader --save-dev
# webpack.config.js中使用loader

module: {
  rules:[
    ...
    {
      test: /\.(png|jpe?g|gif)$/,
      use: {
        loader: "url-loader",
        options: {
          // placeholder 占位符 [name] 源资源模块的名称 [ext] 源资源模块的后缀
          name: "[name]_[hash].[ext]",
          // 小于 100 字节转成 base64 格式
          limit: 100
        }
      }
    }
  ]
}
# 修改src/index.js

import "./styles/index.scss"

import wepack_logo from  "./images/webpack.jpg"

function divComponent() {
  const element = document.createElement('div');

  element.innerHTML = "Hello Webpack";

  return element;
}

function imgComponent() {
  const element = document.createElement('img');

  element.src = wepack_logo;

  return element;
}

document.body.appendChild(divComponent());
document.body.appendChild(imgComponent());

在这里插入图片描述

plugin的使用方法

  • 使用HtmlWebpackPlugin,⾃动生成⼀个html文件,并把打包生成的js模块引⼊到该html中
# 安装plugin

npm install file-loader url-loader --save-dev
# webpack.config.js中使用plugin

// 引入plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');

// 配置plugin
 plugins: [new HtmlWebpackPlugin({
    title: "webpack 应用",
    filename: "index.html",
    template: "./public/index.html"
  })
],
# 删除dist下的index.html,新增public文件夹,在文件夹中新建index.html

<!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8" />
     <title>webpack 应用</title>
   <script defer src="main.js"></script></head>
   <body>
   </body>
 </html>
  • 使用clean-webpack-plugin, 删除(清理)构建目录
# 安装plugin

npm install --save-dev clean-webpack-plugin
# webpack.config.js中使用plugin

// 引入plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');

// 配置plugin
plugins: [
  ...
  new CleanWebpackPlugin(),
  ...
],
  • 使用mini-css-extract-plugin, 将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件,并且支持 CSS 和 SourceMaps 的按需加载。
# 安装plugin

npm install --save-dev mini-css-extract-plugin
# webpack.config.js中使用plugin

// 引入plugin
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

// 配置loader

module: {
  rules:[
    ...
    {
      test: /\.s?css$/,
      use: [
        { loader: MiniCssExtractPlugin.loader },
        {
          loader: 'css-loader',
          options: {
            modules: true,
          },
        },
        { loader: 'sass-loader' },
      ]
    },
    ...
  ]
}
// 配置plugin
plugins: [
  ...,
  new MiniCssExtractPlugin({
    filename: '[name].css'
  }),
  ...
]

项目源码

  • 目录
|--- webpack-demo
    |--- node_modules
    |--- public
        |--- index.html
    |---src
        |--- images
            |--- webpack.png
        |--- styles
            |--- index.scss
        |--- index.js
    |--- package.json
    |--- webpack.config.js
  • public/index.html
<!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8" />
     <title><%=htmlWebpackPlugin.options.title%></title>
   </head>
   <body>
   </body>
 </html>
  • src/styles/index.scss
body {
    background:gray;
    text-align: center;
    font-size: 24px;
    color:#fff;
}
  • src/index.js
import "./styles/index.scss"

import wepack_logo from  "./images/webpack.jpg"

function divComponent() {
  const element = document.createElement('div');

  element.innerHTML = "Hello Webpack";

  return element;
}

function imgComponent() {
  const element = document.createElement('img');

  element.src = wepack_logo;

  return element;
}

document.body.appendChild(divComponent());
document.body.appendChild(imgComponent());
  • package.json
{
  "name": "webpack_study",
  "version": "1.0.0",
  "description": "webpack基础用法",
  "scripts": {
    "build": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^4.0.0",
    "css-loader": "^7.1.2",
    "file-loader": "^6.2.0",
    "html-webpack-plugin": "^5.6.0",
    "mini-css-extract-plugin": "^2.9.1",
    "sass": "^1.78.0",
    "sass-loader": "^16.0.1",
    "style-loader": "^4.0.0",
    "url-loader": "^4.1.1",
    "webpack": "^5.94.0",
    "webpack-cli": "^5.1.4"
  }
}
  • webpack.config.js
const path = require('path');

const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  // 入口(entry)
  entry: './src/index.js',
  // 输出(output)
  output: {
    // 指定输出文件名
    filename: 'main.js',
    // 指定输出目录
    path: path.resolve(__dirname, 'dist'),
  },
  // 告知webpack使用相应模式的内置优化
  // mode配置选项:'none' | 'development' | 'production'
  // 如果没有设置,webpack会给mode的默认值设置为production
   mode: 'development',
   // 多个loader作用一个模块需要用数组形式且要注意顺序,自后往前
   // webpack自定义loader规范:一个loader最好制作一件事
   module: {
    rules:[
      {
        test: /\.s?css$/,
        use: [
          { loader: MiniCssExtractPlugin.loader },
          {
            loader: 'css-loader',
            options: {
              modules: true,
            },
          },
          { loader: 'sass-loader' },
        ]
      },
      {
        test: /\.(png|jpe?g|gif)$/,
        use: {
          loader: "url-loader",
          options: {
            // placeholder 占位符 [name] 源资源模块的名称 [ext] 源资源模块的后缀
            name: "[name]_[hash].[ext]",
            // 小于 100 字节转成 base64 格式
            limit: 100
          }
        }
      }
    ]
   },
   plugins: [new HtmlWebpackPlugin({
      title: "webpack 应用",
      filename: "index.html",
      template: "./public/index.html"
    }),
    new CleanWebpackPlugin(),
    new MiniCssExtractPlugin({
      filename: '[name].css'
     }),
  ],
};

标签:02,index,plugin,loader,webpack,html,工程化,js
From: https://blog.csdn.net/weixin_41016739/article/details/142301473

相关文章

  • 【2024研赛】【华为杯】2024 年研究生数学建模比赛思路、代码更新中.....
    ......
  • Unet改进35:添加FastKANConv2DLayer(2024最新改进方法)
    本文内容:在不同位置添加FastKANConv2DLayer目录论文简介1.步骤一2.步骤二3.步骤三4.步骤四论文简介地址1.步骤一新建blocks/fastkan.py文件,添加如下代码:importtorchimporttorch.nnasnnclassRadialBasisFunction(nn.Module):def__init__(......
  • 【EI 会议末轮截稿通知】第三届电子信息技术国际学术会议(EIT 2024)
    第三届电子信息技术国际学术会议(EIT2024)The3rd InternationalConferenceonElectronicInformationTechnology    电子信息工程在我国信息化产业的发展过程中举足轻重,且随着移动通信与网络技术的发展,电讯网络、工业智能制造等领域与电子信息工程技术密切相关......
  • 【EI会议末轮截稿通知】第三届电子信息技术国际学术会议(EIT 2024)
    第三届电子信息技术国际学术会议(EIT2024)The3rd InternationalConferenceonElectronicInformationTechnology重要信息大会官网:www.ic-eit.net三轮截稿时间:2024年9月16日23:59分(后续不再征稿!)大会时间:2024年9月20-22日地点:成都天河智选假日酒店(犀浦高铁站店)接受......
  • 202312-2 因子化简ccfcsp
    常规质数因子带相关资料抄写稍加修改指数的筛选部分includeinclude<math.h>typedeflonglongll;usingnamespacestd;boolisprime(lln){inti;if(n<=1)returnfalse;intsq=(int)sqrt(1.0n);for(i=2;i<=sq;i++){if(n%i==0)returnfalse;}returntrue;}cons......
  • 代码随想录算法训练营Day5 | 哈希表理论基础、242.有效的字母异位词、349.两个数组的
    哈希表理论基础哈希表哈希表是根据关键码的值而直接进行访问的数据结构。数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素,如下图所示:哈希表一般用来快速判断一个元素是否出现集合里。哈希函数哈希函数通过特定编码方式,可以将其......
  • 02策略模式
    1.案例:营业员根据客户所购买商品的单价和数量,根据不同活动向客户收费**-正常原价收费-八折收费-满300返1002.策略模式结构-抽象策略类(Stategy):声明算法的方法,抽象层的设计使上下文类可以无差别的调用不同的具体策略的方法enumCashType{NORMAL=0,RE......
  • WEB-API+.NET+CRUD+SSMS(VS2022)
    1.使用VS2022创建一个web-api项目,根目录如下:其中TestCode.cs写model实体类,Controller编写控制器2.实体类Item,编写对应的属性点击查看代码publicclassItem{[Required]publicintId{get;set;}[Required]publicintFieldID{get;set;}......
  • VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Serve
    VMwareESXi7.0U3qmacOSUnlocker集成驱动版更新OEMBIOS2.7支持WindowsServer2025VMwareESXi7.0U3qmacOSUnlocker&OEMBIOS2.7集成网卡驱动和NVMe驱动(集成驱动版)ESXi7.0U3标准版集成Intel网卡、RealtekUSB网卡和NVMe驱动请访问原文链接:h......
  • [ACTF2020 新生赛]Upload
    启动靶机,发现有前端验证先绕过前端验证,在burp中尝试发现验证在文件名后缀,且会重命名文件名发现.ini能上传但是会被重命名,既然不像前端显示只有三种格式能上传,这里我们寻找能绕过的后缀尝试发现phtml能上传成功//PHTML扩展名是PHP的一个模块,它允许在HTML文件中使用PHP......