webpack

webpack 为自动化构建工具,将项目中的文件,打包成静态文件,可以直接运行 html 文件来开启项目,打包后的项目叫做,生产环境

安装 webpack

创建一个项目文件夹: mkdir 或者直接右键来新建文件夹

打开终端 cd 到刚创建的文件夹中 01-webpack-app

创建一个 package.json ,npm init -y (-y 是一路回车 yes)

安装依赖包: npm install webpack webpack-cli --save-dev

项目目录

01-webpack-app

public(静态资源文件夹)

index.html (项目唯一的 html 文件)

src (写代码的地方)

main.js (入口 js 文件)

webpack.config.js (项目的配置文件)

配置入口和出口 

// 用来获取设置路径用的
const path = require('path')
// 就是 webpack 的配置
module.exports = {
    // 配置环境
    // development: 开发环境(写代码的阶段)
    // production: 生产环境(代码已经写好了部署到服务器的代码)
    // production: 测试环境(代码已经写好了,但是还没有部署到服务器的代码)
    mode: 'development',
​
    // 配置项目入口
    // entry: './src/main.js'
    entry: {
        app: './src/main.js'
    },
​
    // 配置项目的出口
    output: {
        // 设置打包之后文件放在 dist 目录下
        // __dirname 获取到的是当前文件所在的目录路径
        path: path.resolve(__dirname, 'dist'),
        // filename 配置文件打包后的名字
        // [name] 获取入口名称 app
        // [hash:8] 随机 8 位字符
        // .js 就是我们的后缀名
        // app.adj23gh5.js
        filename: '[name].[hash:8].js',
        // 清除之前打包的文件,有新的文件后,之前的文件就不用了
        clean: true
    }
}
 

执行命令: webpack

如果提示你 webpack 命令无法使用,那么你可以尝试先全局安装 webpack 和 webpack-cli

npm i -g webpack webpack-cli

如果全局安装了之后还不能使用,那么可以使用 npx webpack 在进行尝试打包

如果还是不能使用,那么你就要叫我一下.

npx webpack, npx 就是使用最新的 webpack 进行打包处理

打包 html 文件

打包之后 dist 文件夹中要配置 html 文件,而且要让 html 文件和入口 js 文件产生联系,所谓的产生联系

其实就是让 html 中自动导入 js 或者 css 文件

  1. 安装: npm i html-webpack-plugin

  2. 配置插件,导入插件:

// 导入 html 的打包插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
  1. 配置 plugins

// 就是 webpack 的配置
module.exports = {
 ...
 // 配置插件的地方
 plugins: [
     // 将 ./public/index.html 配置为咱们的主要 html 文件
     // 要打包的 html 文件
     new HtmlWebpackPlugin({
         template: './public/index.html'
     })
 ]
}
​

打包 css 文件

配置 css 的样式加载器(解析器)

在 main.js 中通过 import 导入 css 文件的时候会给出以下报错

ERROR in ./src/main.css 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> * {
|     background-color: red;
| }
 @ ./src/main.js 1:0-19

告诉我们需要使用加载器进行加载

  1. 安装加载器: npm i style-loader css-loader

  2. 配置以 .css 结尾的文件使用对应的加载器

  3. 执行打包命令

  4. 打包之后发现 css 文件中的代码被打包到 js 文件中了

配置样式文件打包独立文件

先安装独立配置 css 文件的插件

安装命令: npm i mini-css-extract-plugin

导入插件

// 导入 css 独立文件的插件
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

使用插件

// 就是 webpack 的配置
module.exports = {
    ...
    // 配置插件的地方
    plugins: [
        ...
        // 配置打包独立 css 文件之后的名称
        new MiniCssExtractPlugin({
            filename: 'css/[hash:8].css'
        })
    ],
    // 加载器的配置
    module: {
        rules: [
            // 配置 .css 结尾的文件使用对应的加载器
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader']
            }
        ]
    }
}
 

第一步导入插件,第二步使用插件,第三步是配置加载器

less 配置

我们将原来的 css 文件改为 .less 结尾的文件后报错

该报错是告诉我们需要使用 less 的加载器

ERROR in ./src/main.less 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> * {
|     background-color: red;
| }
 @ ./src/main.js 1:0-20

先安装 less 的加载器

安装命令: npm i less less-loader

配置 .less 结尾的文件使用对应的加载器

// 就是 webpack 的配置
module.exports = {
    ...
    // 加载器的配置
    module: {
        rules: [
            // 配置 .css 结尾的文件使用对应的加载器
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader']
            },{
                test: /\.less$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
            }
        ]
    }
}
 

sass 配置

如果想支持 scss 文件

此时我们需要先配置 sass 的加载器

安装命令:npm i node-sass sass-loader

// 加载器的配置
    module: {
        rules: [
            // 配置 .css 结尾的文件使用对应的加载器
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader']
            },{
                test: /\.less$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
            },{
                test: /\.scss$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
            }
        ]
    }

 

react 配置

react

安装: npm i react react-dom @babel/core babel-loader @babel/preset-env @babel/preset-react

配置文件中配置 react

// 加载器的配置
    module: {
        rules: [
          ...  
          {
                test: /\.(js|jsx)$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            '@babel/preset-env', // js 的新语法
                            '@babel/preset-react' // react 的语法
                        ]
                    }
                } 
            }
        ]
    }

在 src 文件夹中创建文件

src

App.jsx (根组件)

// react 的根组件
import React, {Component} from "react";
​
export default class App extends Component {
​
    render() {
        return (
            <div>
                <h1> 一节课不旷,一节课不听,主打的是就是陪伴 </h1>
                <h2>你好世界</h2>
            </div>
        )
    }
}

main.js (入口文件)

import React from "react";
import ReactDOM from "react-dom/client";
​
import App from "./App.jsx";
​
console.log(App);
const root = ReactDOM.createRoot(document.getElementById('app'))
​
root.render(<App />)

注意 index.html 文件中需要创建一个 div 且 id 要是 app

main.scss (全局样式文件)

热更新

  1. 安装 cnpm i webpack-dev-server

  2. 在 package.json 中的 scripts 选项中配置

"scripts": {
    "start": "webpack-dev-server --config webpack.config.js", // 配置项目启动
    "build": "webpack --config webpack.config.js" // 配置项目打包
  }
  1. 执行 npm start 进行项目的运行,执行 npm build 进行打包

图片加载器

如果说想要在项目中使用 图片模块可以做以下配置

// 加载器的配置
    module: {
        rules: [
          ...  
          {
                // 配置图片加载器
                test: [/\.jpe?g$/, /\.png$/, /\.gif$/, /\.weeb$/],
                type: 'asset', // 通用 资源类型
                parser: {
                    dataUrlCondition: {
                        maxSize: 5 * 1024, // 5kb
                    }
                }
            }
        ]
    }

配置忽略后缀名

// 配置别名和忽略名
    resolve: {
        // 配置无需后缀名
        extensions: ['.js','.ts','.jsx','.tsx','.vue']
    }

配置 @ 别名

// 配置别名和忽略名
    resolve: {
        // 配置无需后缀名
        extensions: ['.js','.ts','.jsx','.tsx','.vue'],
        // 配置 @ 为 src 路径
        alias: {
            '@': path.resolve(__dirname, './src')
        }
    }

服务器代理解决跨域

// 配置服务器代理
    devServer: {
        port: 3000,
        proxy: {
            '/api': {
                // 代理的地址
                target: 'http://open.douyucdn.cn',
                // 默认情况下,代理时会保留主机头的来源,可以将 changeOrigin 设置为 true 以覆盖此行为。
                changeOrigin: true
            }
          },
    }

vue 配置

安装: cnpm i vue-loader@15 vue-template-compiler vue@2

导入插件:

// 导入 vue 的加载器
const VueLoader = require('vue-loader/lib/plugin')

配置插件

// 配置插件的地方
 plugins: [
     // 配置 vue 插件
     new VueLoader(),
    ...
 ],

配置加载器

// 加载器的配置
 module: {
     rules: [
        ...  
       , {
             test: /\.vue$/,
             use: ['vue-loader']
         }
     ]
 },

配置 vue 项目

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值