首页 > 其他分享 >Webpack 使用详解

Webpack 使用详解

时间:2023-08-14 10:31:44浏览次数:41  
标签:-- webpack module loader Webpack 详解 使用 js

Webpack 是一个现代 JavaScript 应用程序的静态模块打包器。本文将详细介绍如何使用 Webpack,以及提供代码示例。为了保持篇幅,我们将简要介绍 Webpack 的核心概念和功能。

一、核心概念

入口(entry):应用程序的起点。
输出(output):打包后资源的输出位置。
加载器(loader):将非 JavaScript 文件转换为模块。
插件(plugin):执行范围更广的任务,如优化、压缩等。

二、安装与配置

1. 安装

首先,确保你的系统已经安装了 Node.js。使用以下命令安装 Webpack 和 Webpack CLI:

npm install --save-dev webpack webpack-cli
2. 配置

在项目根目录下,创建一个名为 webpack.config.js 的配置文件。以下是一个简单的配置示例:

const path = require('path');

module.exports = {
  entry: './src/index.js', // 入口文件
  output: {
    filename: 'bundle.js', // 输出文件名
    path: path.resolve(__dirname, 'dist') // 输出目录
  }
};

三、加载器与插件

1. 加载器

加载器用于将非 JavaScript 文件转换为模块。以下是一些常用加载器的示例:

(1) 样式加载器 安装 style-loader 和 css-loader:

npm install --save-dev style-loader css-loader

配置:

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  }
};

(2) 文件加载器 安装 file-loader:

npm install --save-dev file-loader

配置:

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/,
        use: ['file-loader']
      }
    ]
  }
};
2. 插件

插件可以执行更广泛的任务,如优化、压缩等。以下是一些常用插件的示例:

(1) HtmlWebpackPlugin 安装 html-webpack-plugin:

npm install --save-dev html-webpack-plugin

配置:

const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  // ...
  plugins: [
    new HtmlWebpackPlugin({
      title: 'My App',
      template: './src/index.html'
    })
  ]
};

(2) CleanWebpackPlugin 安装 clean-webpack-plugin:

npm install --save-dev clean-webpack-plugin

配置:

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
  // ...
  plugins: [
    new CleanWebpackPlugin()
  ]
};

四、开发与生产环境

1. 模式

Webpack 支持两种模式:开发(development)和生产(production)。开发模式不会执行代码压缩和优化,而生产模式会对代码进行压缩和优化。在 webpack.config.js 文件中设置模式:

module.exports = {
  // ...
  mode: 'development' // 或 'production'
};
2. 开发服务器

安装 webpack-dev-server:

npm install --save-dev webpack-dev-server

配置:

module.exports = {
  // ...
  devServer: {
    contentBase: path.join(__dirname, 'dist'),
    compress: true,
    port: 9000
  }
};

五、示例项目

以下是一个简单的 Webpack 示例项目:

  1. 创建目录结构:
my-app/
|-- src/
|   |-- index.html
|   |-- index.js
|   |-- styles.css
|   |-- image.png
|-- package.json
|-- webpack.config.js
  1. 填充 src 目录中的文件:
  • index.html
<!DOCTYPE html>
 <html> 
 	<head> 
		 <meta charset="utf-8" />
 		 <title>My App</title>
   </head>
   <body> 
    	<div id="app"></div> 
   		<script src="bundle.js"></script> 
   </body> 
</html> 
  • index.js
import './styles.css';
import imgSrc from './image.png';

const app = document.getElementById('app');
app.innerHTML = `
  Hello, Webpack!
  <img src="${imgSrc}" alt="Webpack Logo" />
`;
  • styles.css
body {
  font-family: Arial, sans-serif;
  text-align: center;
}

h1 {
  color: #2c3e50;
}

img {
  width: 150px;
  height: 150px;
}
  1. 在 webpack.config.js 中配置加载器和插件:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  mode: 'development',
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
      {
        test: /\.(png|svg|jpg|jpeg|gif)$/,
        use: ['file-loader'],
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
    }),
    new CleanWebpackPlugin(),
  ],
  devServer: {
    contentBase: path.join(__dirname, 'dist'),
    compress: true,
    port: 9000,
  },
};
  1. 在 package.json 中添加启动脚本:
{
  // ...
  "scripts": {
    "start": "webpack serve",
    "build": "webpack"
  },
  // ...
}
  1. 运行项目:
npm start

访问 http://localhost:9000 即可查看示例项目。使用 npm run build 可以打包项目。

总结

通过本文,你应该已经掌握了 Webpack 的基本使用方法。实际项目中,你可能还需要根据需求进一步配置 Webpack。更多信息和高级配置,请查阅 Webpack 官方文档

标签:--,webpack,module,loader,Webpack,详解,使用,js
From: https://blog.51cto.com/u_16171861/7073538

相关文章

  • 面试官:为什么MySQL不建议使用NULL作为列默认值?(转)
    原文:https://mp.weixin.qq.com/s/4aWKVvGTjG4Hiv2ULxQiAg来源:微信公众号“Java充电社”今天来分享一道美团高频面试题,5分钟搞懂“为什么MySQL不建议使用NULL作为列默认值?”。对于这个问题,通常能听到的答案是 使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你......
  • nvm - windows的安装和使用
    nvm-介绍node版本管理器,也就是说:一个nvm可以管理多个node版本(包含npm与npx),可以方便快捷的安装、切换不同版本的node。nvm-windows就是nvm的windows版本。https://github.com/nvm-sh/nvmnvm和node默认安装目录C:\Users\oujr\AppData\Roaming\nvm这个要改......
  • UTM v4.3.5 - 在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS
    UTMv4.3.5-在macOS上优雅的使用QEMU虚拟化Windows、Linux和macOS在iOS中虚拟化Windows、Linux和Unix请访问原文链接:https://sysin.org/blog/utm-4/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgUTM4底层基于QEMU,在Mac上安全的运行Windows、Li......
  • docker swarm 使用详解
    转载请注明出处:1.dockerswarm的组成架构一个基本的dockerswarm的架构如下:它主要包含这几个核心组件:Manager节点(ManagerNodes):管理节点是Swarm集群的控制中心,负责整个集群的管理和调度。Swarm可以有一个或多个Manager节点,其中一个被选举为Leader,负责领导整......
  • python实战练习:对哪部分使用类型转换
         l=[]whileTrue:s=input()ifs=='0':#注意:这里是对0加引号,而不是使用int(s),如果输入'hello',int(s)会报错,所以是用字符串'0'breakelse:l.append(s)print("".join(l)) ......
  • 水果编曲软件FL Studio 21.1.0.3267音频工作站2023电脑配置要求详解
    FL全称为FruityLoops,FLStudio更倾向于DJ混音和编辑。但这并不意味着它缺乏功能!FLStudio21是一个受欢迎的插件,如果购买了制作版本,那么这个软件就可以终身更新。为音乐制作和音频编辑选择硬件FLStudio21Win-安装包:https://souurl.cn/ZIwzHsFLStudio21Mac-安装包:https://sou......
  • 使用Spring initializr快速创建一个springboot项目
     第一步首先new一个新的project选择Springinitializr配置好相关信息后下一步编辑在左上角我们可以选择SprinBoot的版本,在这里直接加入web依赖springweb和Template的Thymeleaf依赖,点上对勾后可以在最右边里看到你选择的依赖,然后点击create编辑可以看到我们的项目结构,很多sprin......
  • C++使用new来初始化指向类的指针
    C++使用new来初始化类的指针1.ClassName*p=newClassName;调用默认构造函数。如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如classNoConstructor//没写构造函数的类{public:~NoConstructor(){}voidprintVal(){......
  • 使用 Spring Cloud 构建微服务架构
    随着软件架构的演变,微服务架构变得越来越流行,它可以帮助团队更有效地构建、部署和维护应用程序。SpringCloud提供了一套工具和组件,使得在微服务架构中构建、连接和管理服务变得更加简单和可靠。1.微服务架构概述微服务架构是一种将应用程序拆分为一组小型、自治的服务的架构。每......
  • 思科交换机和路由器使用TFTP备份和还原配置文件
     (1)给交换机配置管理地址,保证交换机与服务器相连通SW1(config)#intvlan1SW1(config-if)#ipadd192.168.1.1255.255.255.0SW1(config-if)#noshutSW1#write(2)备份startup-config到服务器SW1#copystartup-configtftp: Addressornameofremotehost[]?192.168.1.......