基於React+Webpack+Mobx+Less項目搭建指南

此教程針對 Webpack 爲 4.X 版本css

Webpack

Webpack 支持零配置,若是 entry 不配置,默認值爲 ./src ;若是 output 不寫,默認值爲 ./disthtml

Webpack4.X 版本廢棄了 CommonsChunkPlugin,須要使用 optimize.splitChunks 來替換。node

extract-text-webpack-plugin@4.0.0-beta.0 有不少問題,基於官方推薦,咱們使用 mini-css-extract-plugin 來替換。webpack

webpack.config.js 是不能使用 import 命令的,須要把文件名改爲 webpack.config.babel.js 才能夠。這是一個 webpack 支持的特性,只要你把文件名改爲 webpack.config.[loader].js, webpack 就會用相應的 loader 去轉換一遍配置文件。web

Webpack 新增了 mode 配置,有兩個參數,一個爲 production,另外一個爲 developmentapi

API 地址瀏覽器

Babel

Babel 主要是用來把代碼轉譯爲 ES5。使用前須要在 webpack.config.babel.js 配置 babel-loader,其次,在新增 .babelrc 文件,在該文件中進行配置一些轉譯規則。babel

在線轉譯的網址less

Mobx

Mobx 是一個簡單、可擴展的狀態管理庫。ide

API 地址

Less

LessCSS 的語法基礎之上,引入了變量,Mixin(混入),運算以及函數等功能,大大簡化了 CSS 的編寫,而且下降了 CSS 的維護成本,就像它的名稱所說的那樣,Less 能夠讓咱們用更少的代碼作更多的事情。

API 地址

詳細配置

新建 webpack.config.babel.js 文件,並做以下配置。

import path from 'path';
// 清除文件夾內文件插件
import CleanWebpackPlugin from 'clean-webpack-plugin';
// 生成 HTML 文件插件
import HtmlWebpackPlugin from 'html-webpack-plugin';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
// 打開瀏覽器插件
import OpenBrowserPlugin from 'open-browser-webpack-plugin';
import alias from './webpack.alias.js';

const port = 9676;

module.exports = {
    // 入口文件
    entry: './src/index.js',
    // 輸出
    output: {
        // 輸出文件名
        filename: 'bundle.js',
        // 輸出路徑
        path: path.resolve(__dirname, 'dist')
    },
    // loader
    module: {
        rules: [{
            test: /\.js[x]?$/,
            loader: 'babel-loader',
            // node_modules 不使用 babel-loader
            exclude: /node_modules/
        }, {
            test: /\.less$/,
            use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
        }, {
            test: /\.css/,
            use: [MiniCssExtractPlugin.loader, 'css-loader']
        }]
    },
    resolve: {
        alias: alias,
        extensions: ['.js', '.jsx']
    },
    plugins: [
        new HtmlWebpackPlugin({
            title: 'Blog',
            template: path.join(__dirname, 'template.ejs')
        }),
        new MiniCssExtractPlugin({
            filename: '[name].css',
            allChunks: true
        }),
        new CleanWebpackPlugin('./dist/*.*'),
        new OpenBrowserPlugin({url: `http://localhost:${port}`})
    ],
    devServer: {
        // 端口號
        port: port,
        host: '0.0.0.0',
        compress: true,
        proxy: {
            '/api/*': {
                target: 'http://localhost:8987'
            }
        }
    }
};
複製代碼
相關文章
相關標籤/搜索