使用Webpack配置React和Vue开发环境【超实用】

当下前端最火的两个框架就是了 React 和 Vue 了,Facebook 官方推出的 create-react-app ,Vue 也有本身的 CLI 工具Vue-CLI,两个工具都已经很是好用,但在实际项目中,咱们仍然须要作一些修改才能够知足实际项目上线的需求,同时咱们仍但愿有更多所谓个性化设置来支持项目。因此掌握 Webpack 中 React 和 Vue 的配置仍是颇有必要的事情。javascript

配置React开发环境

一、React项目基础配置

建立项目目录,比较在本地建立一个 myapp 的文件夹,依次执行初始化、安装React、安装Webpack和Babel等操做,具体执行命令以下:html

# 新建目录,而且进入
mkdir react-webpack && cd $_
# 建立 package.json
npm init -y
# 安装 react react-dom依赖
npm i react react-dom
# 安装 webpack 和 webpack-cli 开发依赖
npm i webpack webpack-cli -D
# 安装 babel
npm i babel-loader @babel/core @babel/preset-env -D
# 安装 babel preset-react
npm i @babel/preset-react -D
复制代码

还须要添加支持jsx文件的Babel,新建 webpack.config.js 的配置文件,内容以下:前端

module.exports = {
    resolve: {
        extensions: ['.wasm', '.mjs', '.js', '.json', '.jsx']
    },
    module: {
        rules: [
            {
                test: /\.jsx?$/, // jsx/js文件的正则
                exclude: /node_modules/, // 排除 node_modules 文件夹
                use: {
                    // loader 是 babel
                    loader: 'babel-loader',
                    options: {
                        // babel 转义的配置选项
                        babelrc: false,
                        presets: [
                            // 添加 preset-react
                            require.resolve('@babel/preset-react'),
                            [require.resolve('@babel/preset-env'), {modules: false}]
                        ],
                        cacheDirectory: true
                    }
                }
            }
        ]
    }
};
复制代码

在项目的根目录下建立src目录,在src下分别建立如下文件:vue

App.js文件:java

// App.jsx
import React from 'react';
import ReactDOM from 'react-dom';
const App = () => {
    return (
        <div> <h1>Hello React and Webpack</h1> </div>
    );
};
export default App;
ReactDOM.render(<App />, document.getElementById('app')); 复制代码

index.js文件:node

// index.jsx
import App from './App'; // 这里能够省略.jsx
复制代码

在 webpack.config.js 中添加 entry:react

module.exports = {
    entry: './src/index.jsx'
    // ...
};
复制代码

接下来在项目根目录下建立 public 目录,用于存放静态资源文件,新建 index.html 文件,做为项目的模板,内容以下:webpack

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <title>Hello React Webpack</title>
    </head>
    <body>
        <div id="app"></div>
    </body>
</html>
复制代码

咱们须要使用 html-webpack-plugin 插件来复制 index.html 到 dist 文件夹下,首先是安装 html-webpack-plugin :web

cnpm i html-webpack-plugin -D
复制代码

修改 webpack.config.js:npm

const HtmlWebPackPlugin = require('html-webpack-plugin');
module.exports = {
    // ...
    plugins: [
        new HtmlWebPackPlugin({
            template: 'src/index.html',
            filename: 'index.html'
        })
    ]
};
复制代码

在 scripts 中配置打包命令:

{
    "scripts": {
        "build": "webpack --mode production"
    }
}
复制代码

二、React本地服务配置

首先使用webpack-dev-server搭建一个本地开发服务,安装webpack-dev-server依赖:

npm i webpack-dev-server -D
复制代码

在package.json增长start的命令:

{
    "scripts": {
        "build": "webpack --mode production",
        "start": "webpack-dev-server --mode development --open"
    }
}
复制代码

为了方便开发,咱们将新建了一个webpack.config.dev.js的配置文件:

const path = require('path');

const HtmlWebPackPlugin = require('html-webpack-plugin');

module.exports = {
    mode: 'development',
    devtool: 'cheap-module-source-map',
    devServer: {
        contentBase: path.join(__dirname, './src/'),
        publicPath: '/',
        host: '127.0.0.1',
        port: 3000,
        stats: {
            colors: true
        }
    },
    entry: './src/index.jsx',
    // 将 jsx 添加到默认扩展名中,省略 jsx
    resolve: {
        extensions: ['.wasm', '.mjs', '.js', '.json', '.jsx']
    },
    module: {
        rules: [
            {
                test: /\.jsx?$/, // jsx文件的正则
                exclude: /node_modules/, // 排除 node_modules 文件夹
                use: {
                    // loader 是 babel
                    loader: 'babel-loader',
                    options: {
                        // babel 转义的配置选项
                        babelrc: false,
                        presets: [
                            // 添加 preset-react
                            require.resolve('@babel/preset-react'),
                            [require.resolve('@babel/preset-env'), {modules: false}]
                        ],
                        cacheDirectory: true
                    }
                }
            }
        ]
    },
    plugins: [
        new HtmlWebPackPlugin({
            template: 'src/index.html',
            filename: 'index.html',
            inject: true
        })
    ]
};
复制代码

对应的package.json的scripts也修改下,start 添加 config 文件路径:

{
    "scripts": {
        "build": "webpack --mode production",
        "start": "webpack-dev-server --config './webpack.config.dev.js' --open "
    }
}
复制代码

到这里,能够执行下npm start看下效果了!

配置Vue的开发环境

上面 React 部分已经详细讲解了一些重复的步骤,这里就简单说下操做步骤和代码。

首先也是建立目录、初始化 package.json、安装 Vue、安装 Webpack 和安装 Babel。

# 新建目录,而且进入
mkdir vue-webpack && cd $_
# 建立 package.json
npm init -y
# 安装 vue 依赖
npm i vue
# 安装 webpack 和 webpack-cli 开发依赖
npm i webpack webpack-cli -D
# 安装 babel
npm i babel-loader @babel/core @babel/preset-env -D
# 安装 loader
npm i vue-loader vue-template-compiler -D
# 安装 html-webpack-plugin
npm i html-webpack-plugin -D
复制代码

而后在 src 文件夹下新建App.vue和index.js两个文件,内容以下:

// app.js
import Vue from 'vue';
import App from './app.vue';

Vue.config.productionTip = false;

new Vue({
    render: h => h(App)
}).$mount('#app');
复制代码
<template>
    <div id="app">
        Hello Vue & Webpack
    </div>
</template>

<script> export default {}; </script>
复制代码

而后建立一个 HTML 文件index.html:

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8" />
        <title>Webpack Vue Demo</title>
    </head>
    <body>
        <div id="app"></div>
    </body>
</html>
复制代码

最后配置webpack.config.js,内容以下:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    resolve: {
        alias: {
            vue$: 'vue/dist/vue.esm.js'
        },
        extensions: ['*', '.js', '.vue', '.json']
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader'
                }
            },
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            }
        ]
    },
    plugins: [
        new VueLoaderPlugin(),
        new HtmlWebpackPlugin({
            template: './src/index.html',
            filename: 'index.html'
        })
    ]
};
复制代码

Vue 的配置文件跟 React 最大区别是,React 是直接扩展了 Babel 的语法,而 Vue 语法的模板还须要使用vue-loader来处理。

完成上面配置后,执行下npx webpack看下 dist 产出吧。开发相关的配置跟 React 部分基本一致,这里再也不重复介绍了。

相关文章
相关标签/搜索