webpack处理react、vue

使用React框架

接下来我们构建一个React基础环境,在React中我们需要解决的jsx语法问题

安装依赖:

npm install -D @babel/preset-react
npm install -S react
npm install -S react-dom

在配置文件中,我们也需要添加jsx语法的解析

{
    test: /\.(js|jsx)$/,//一个匹配loaders所处理的文件的拓展名的正则表达式,这里用来匹配js和jsx文件(必须)
    exclude: /node_modules/,//屏蔽不需要处理的文件(文件夹)(可选)
    loader: 'babel-loader',//loader的名称(必须)
}

同时我们需要修改.babelrc文件

{
    "presets": [
        [
            "@babel/preset-env",
            {
                "modules": false,
                "targets": {
                    "browsers": [
                        "> 1%",
                        "last 2 versions",
                        "not ie <= 8"
                    ]
                }
            }
        ],
        "@babel/preset-react"
    ]
}

修改主文件,键入React代码

import React from 'react'
import ReactDom from 'react-dom'

class App extends React.Component {
    render(){
        return (
            <div style={{color:"#333"}}>
                Hello
            </div>
        )
    }
}
ReactDom.render(<App/>,document.getElementById("root"))

 

使用 Vue 框架

Vue 是一个渐进式的 MVVM 框架,相比于 React、Angular 它更灵活轻量。 它不会强制性地内置一些功能和语法,你可以根据自己的需要一点点地添加功能。 虽然采用 Vue 的项目能用可直接运行在浏览器环境里的代码编写,但为了方便编码大多数项目都会采用 Vue 官方的单文件组件的写法去编写项目。 由于直接引用 Vue 是古老和成熟的做法,本书只专注于讲解如何用 Webpack 构建 Vue 单文件组件。

接下来我们配置一下相关环境 css预处理器

npm i -D stylus stylus-loader
npm i -D postcss-loader

预处理器工具

npm i -D autoprefixer

处理html文件

npm i -D html-webpack-plugin

处理vue文件

npm i -D vue vue-loader vue-style-loader vue-template-loader vue-template-compiler

修改webpack.config.js文件

const path = require('path');
const optimizeCss = require('optimize-css-assets-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const HTMLPlugin = require('html-webpack-plugin')
const webpack = require('webpack')


module.exports = {
    // JavaScript 执行入口文件
    entry: {
        index: "./src/index.js",
        login: "./src/login/login.js"
    },
    // 模式区分:生产和开发环境
    mode: 'development',
    output: {
        // 把所有依赖的模块合并输出到一个 bundle.js 文件
        filename: '[name].js',
        // 输出文件都放到 dist 目录下
        path: path.resolve(__dirname, './dist'),
    },
    module: {
        rules: [
            {
                // 用正则去匹配要用该 loader 转换的 CSS 文件
                test: /\.css$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader
                    },
                    "css-loader"
                ]
            },
            {
                test: /\.js$/,
                use: ['babel-loader'],
                include: path.resolve(__dirname, 'src')
            },
            {
                test: /\.vue$/,
                use: {
                    loader: 'vue-loader'
                }
            },
            {
                test: /\.styl/,
                use: [
                    'style-loader',
                    'css-loader',
                    'postcss-loader',
                    'stylus-loader'
                ]
            }
        ]
    },
    plugins: [
        // css代码压缩
        new optimizeCss(),
        // 单独提取CSS文件
        new MiniCssExtractPlugin({
            filename: "main.css",
            chunkFilename: "[id].css"
        }),
        new VueLoaderPlugin(),
        new HTMLPlugin({
            filename: './public/index.html',
            template: './public/index.html'
        }),
        new webpack.HotModuleReplacementPlugin()
    ],
    devServer: {
        contentBase: path.join(__dirname, 'dist'),
        compress: true,
        port: 9000,
        hot: true,
        open: true
    },
    resolve: {
        extensions: ['.js', '.json']
    }
};

增加Vue文件`components/hello.vue

<template>
  <div>
      Vue文件环境测试
  </div>
</template>

<script>
export default {
  
}
</script>

<style>

</style>

修改主入口文件index.js如下

import "../assets/css/main.css"
import Vue from 'vue';
import App from './components/hello.vue'; 
new Vue({  
  el: '#root',  
  render: h => h(App)
});

复制index.html入口文件到public/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="main.css">
</head>
<body>
    <div id="root"></div>
    <script src="./index.js"></script>
</body>
</html>

同时需要处理css,在项目根目录下创建postcss.config.js

const autoprefixer = require('autoprefixer')
module.exports = {
    plugins:[
        autoprefixer()
    ]
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白小白从不日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值