webpack搭建react开发环境流程

webpack搭建react开发环境流程

1. 初始化项目 yarn init
2. 安装webpack yarn add webpack --dev
3. 创建webpack.config.js 文件
4. 将webpack官网的入口entry粘贴进配置文件
5. 创建src目录,新建app.js入口文件
6. 执行.\node_modules\.bin\webpack 会将app.js文件打包到dist目录下。


需要安装的包:
1. 打包Html文件,使用HtmlWebpackPlugin,(因为默认的index.html文件缺少一些配置,可以自定义模板,参考HtmlWebpackPlugin配置文档)
2. 支持es6语法和react,使用babel,
3. 需要安装react开发必须依赖,安装react和react-dom
4. 打包css文件,使用css-loader style-loader
5. 支将css文件打包成单独文件,使用ExtractTextWebpackPlugin
6. 支持scss格式的样式,使用sass loader、node-sass
7. 支持加载图片,使用file loader,我们使用file loader 的封装 url loader
8. 引入字体文件,使用font-awesome
9. webpack实时加载,使用 webpack-dev-server
10. 在package.json中添加scripts简化命令

 

详细命令:
1. Yarn add html-webpack-plugin --dev
2. yarn add babel-loader @babel/core @babel/preset-env  @babel/preset-react --dev
3. yarn add react react-dom
4. yarn add css-loader style-loader --dev
5. yarn add extract-text-webpack-plugin@next --dev
6. Yarn add sass-loader node-sass  --dev
7. Yarn add file-loader url-loader --dev
8. 直接在html文件header中引入 <link href="http://cdn.bootcss.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
9. Yarn add webpack-dev-server --dev
10. 命令如下:配置完后就可以直接执行yarn run dev (运行编译打包实时更新)、yarn run dist(手动打包),就不用那么打一大串那么麻烦了。

"scripts": {
    "dev": "node_modules/.bin/webpack-dev-server",
    "dist": "node_modules/.bin/webpack -p"
  },

 


配置完成后最终的webpack.config.js 文件

const path = require('path');
const webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
  entry: './src/app.js',                      // entry    : 入口文件
  output: {
    path: path.resolve(__dirname, 'dist'),    // path     : 打包输出到哪儿?
    filename: 'js/app.js'                        // filename :打包后的文件名
  },
  module: {
    // react文件的处理及打包
    rules: [
      {
        test: /\.m?js$/,
        exclude: /(node_modules)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env', '@babel/preset-react'] // jsx转为js函数
          }
        }
      },
      // css文件的处理
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          use: "css-loader"
        })
      },
      // sass文件的处理
      {
        test: /\.scss$/,
        use: [
          "style-loader", // 将 JS 字符串生成为 style 节点
          "css-loader", // 将 CSS 转化成 CommonJS 模块
          "sass-loader" // 将 Sass 编译成 CSS,默认使用 Node Sass
        ]
      },
      // 图片的配置
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,   //文件大于8K的时候,单独将图片打包成文件。
              name: 'resource/[name].[ext]'
            },
          },
        ],
      },
      //字体图标的配置
      {
        test: /\.(woff|woff2|svg|eot|ttf|otf)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,   //文件大于8K的时候,单独将图片打包成文件。
              name: 'resource/[name].[ext]'
            },
          }
        ]
      },
    ]
  },
  // 配置webpack实时重新加载
  devServer: {
    contentBase: './dist',
    port: 8086   //启动端口,默认8080,最好修改一下。以防占用其他软件端口
  },
  plugins: [
    // 处理html文件
    new HtmlWebpackPlugin({
      template: './src/index.html'
    }),
    // 处理独立css文件
    new ExtractTextPlugin("css/[name].css"),
  ],
  // 处理通用模块
  optimization: {
    splitChunks: {
      cacheGroups: {
        commons: {
          name: "commons",
          chunks: "initial",
          minChunks: 2
        }
      }
    }
  },
};

 









 

 

 

 

 

 

 

    
    
    
    
    
    
    
    











posted @ 2019-12-09 11:34  Courage.Kiven  阅读(354)  评论(0编辑  收藏  举报