基于webpack的React项目搭建(三)

前言

  搭建好前文的开发环境,已经可以进行开发。然而实际的项目中,不同环境有着不同的构建需求。这里就将开发环境和生产环境的配置单独提取出来,并做一些简单的优化。

  • 分离不同环境公有配置

  不同环境虽然有不同的构建需求,但依然有相同的部分,这里将共同部分提取出来,单独配置,其他环境再合并共有配置即可。安装webpack-merge(用于合并配置)、uglifyjs-webpack-plugin(js代码压缩,这里单独提取出来控制版本)和rimraf(跨平台删除工具)。

npm install webpack-merge uglifyjs-webpack-pulgin rimraf --save-dev

  接下来配置共有配置webpack.config.js。

const path = require(‘path‘);
const webpack = require(‘webpack‘);

module.exports = {
  entry: [‘babel-polyfill‘, path.resolve(__dirname, ‘../src/index.js‘)],// 指定入口文件,程序从这里开始编译,__dirname当前目录, ../表示上一级目录, ./同级目录
  output: {
    path: path.resolve(__dirname, ‘../dist‘), // 输出的路径
    filename: ‘app/[name]_[hash:8].js‘, // 打包后文件
  },
  module: {
    rules: [
      {
        enforce: ‘pre‘,
        test: /\.(js|jsx)$/,
        loader: ‘eslint-loader‘,
        exclude: /node_modules/,
      },
      {
        test: /\.(js|jsx)$/,
        loader: ‘babel-loader‘, // 加载器
        exclude: /node_modules/,
      },
      {
        test: /\.css$/,
        use: [
          {
            loader: ‘style-loader‘,
          },
          {
            loader: ‘css-loader‘,
          },
        ],
      },
      {
        test: /\.less$/,
        use: [{
          loader: ‘style-loader‘,
        }, {
          loader: ‘css-loader‘,
        }, {
          loader: ‘less-loader‘,
          options: {
            sourceMap: true,
          },
        }],
      },
    ],
  },
};

  配置开发环境webpack.dev.config.js。

const path = require(‘path‘);
const HtmlWebpackPlugin = require(‘html-webpack-plugin‘);
const webpack = require(‘webpack‘);
const merge = require(‘webpack-merge‘);
const webpackConfig = require(‘./webpack.config‘);

process.env.NODE_ENV = ‘development‘;

module.exports = merge(webpackConfig, {
  devtool: ‘cheap-module-eval-source-map‘,
  entry: [
    ‘babel-polyfill‘,
    ‘react-hot-loader/patch‘,
    ‘webpack-dev-server/client?http://localhost:9090‘,
    ‘webpack/hot/only-dev-server‘,
    path.resolve(__dirname, ‘../src/index.js‘),
  ],
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.DefinePlugin({
      ‘process.env.NODE_ENV‘: JSON.stringify(process.env.NODE_ENV || ‘development‘),
    }),
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, ‘../src/index.template.html‘),
      inject: true,
    }),
    new webpack.NoEmitOnErrorsPlugin(),
  ],
});

  由于生产环境不需要热更新等,所以入口文件和以前的index.js有所不同。这里在src目录下新建index.prod.js,编辑如下。

/*eslint-disable*/
import React from ‘react‘;
import { render } from ‘react-dom‘;import ‘babel-polyfill‘;
import App from ‘./App‘;

const renderDom = Component => {
    render(
          <Component />,
        document.getElementById(‘app‘)
    );
};
renderDom(App);

  配置生产环境webpack.prod.config.js。

const path = require(‘path‘);const HtmlWebpackPlugin = require(‘html-webpack-plugin‘);const webpack = require(‘webpack‘);const merge = require(‘webpack-merge‘);const UglifyJSPlugin = require(‘uglifyjs-webpack-plugin‘);const webpackConfig = require(‘./webpack.config‘);

process.env.NODE_ENV = ‘production‘;

module.exports = merge(webpackConfig, {  entry: [    ‘babel-polyfill‘,    path.resolve(__dirname, ‘../src/index.prod.js‘),  ],   plugins: [    new UglifyJSPlugin({      uglifyOptions: {        output: {          comments: false,          beautify: false,        },      },    }),    new webpack.DefinePlugin({      ‘process.env.NODE_ENV‘: JSON.stringify(process.env.NODE_ENV || ‘production‘),    }),    new HtmlWebpackPlugin({      template: path.resolve(__dirname, ‘../src/index.template.html‘),      inject: true,      minify: {        html5: true,        collapseWhitespace: true,        removeComments: true,        removeTagWhitespace: true,        removeEmptyAttributes: true,        removeStyleLinkTypeAttributes: true,      },    }),  ],});

  配置package.json,新建三个执行脚本。

"scripts": {
    "dev": "node bin/dev-server",
    "build": "npm run clean && webpack --config webpack/webpack.prod.config.js",
    "devbuild": "npm run clean && webpack --config webpack/webpack.dev.config.js",
    "clean": "rimraf dist"
  }
# 启动开发调试
npm run dev
# 开发环境构建
npm run devbuild
# 生产环境构建
npm run build
  • 打包简单优化

  我们在构建的时候,往往希望自己的代码和第三方库分离开来,修改webpack.config.js。

......entry: {
    app: [‘babel-polyfill‘, path.resolve(__dirname, ‘../src/index.js‘)],
    vendor: [‘react‘, ‘react-dom‘, ‘babel-polyfill‘],
  },
resolve: { // 指定第三方库目录,减少webpack寻找时间
    modules: [path.resolve(__dirname, ‘../node_modules‘)],
  },......
plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      name: ‘vendor‘,
      minChunks: Infinity,
    }),
  ],......

原文地址:https://www.cnblogs.com/raion/p/8232076.html

时间: 2024-10-11 10:44:31

基于webpack的React项目搭建(三)的相关文章

Vue-Router路由Vue-CLI脚手架和模块化开发 之 Vue-CLI 2.x脚手架工具基于webpack simple模板与基于webpack模板构建项目

Vue-CLI 2.x脚手架工具基于webpack simple模板构建项目 vue-cli是一个基于vue.js进行快速开发的完整系统.基于webpack构建,并进行默认配置,可通过插件扩展,可升级: vue-cli帮我们创建基本项目结构,跳过繁琐的项目配置环节,将精力集中在业务上: vue-cli的版本: @vue/cli 3.x版本:点击前往官网 vue-cli 2.x版本:点击前往官网 安装vue-cli $ npm install -g vue-cli 安装成功,查看其版本: 使用we

基于webpack和vue.js搭建开发环境

前言 在对着产品高举中指怒发心中之愤后,真正能够解决问题的是自身上的改变,有句话说的好:你虽然改变不了全世界,但是你有机会改变你自己.秉承着“不听老人言,吃亏在眼前”的优良作风,我还是决定玩火自焚. 问题所在 之前的项目总结为以下内容: 1.AMD模块规范开发,使用requirejs实现,使用rjs打包,最终导致的结果是,输出的项目臃肿,肿的就像一坨狗不理……不忍直视2.使用gulp进行打包,这一点貌似没有可吐槽的地方,毕竟都是被grunt折磨过来的……3.数据的渲染使用模板引擎,这就意味着你要

基于webpack和vue.js搭建的H5端框架(其实主要用于Hybrid开发H5端框架,但是依然能够作为纯web端使用)

人类的发展得益于对追求不断的提升,在能活着的基础上是否要活得潇洒一点,技术的发展亦如是.在公司作为一个最最最最最最最底层的搬砖码农,经历了两个版本的铸(zhe)炼(mo)之后,我痛下决心今后一定要:…………..一定要和产品惺(shi)惺(bu)相(liang)惜(li). 开始之前 本文包含以下技术,文中尽量给与详细的描述,并且附上参考链接,读者可以深入学习: 1.webpack2.Vue.js3.npm4.nodejs —- 这个就不给连接了,因为上面的连接都是在你实践的过程中要去不断访问的5

dva+react项目搭建

dva 是一个基于 react 和 redux 的轻量应用框架,redux步骤繁杂,更容易出错,搭建成本更高. 1.安装dva-cli:确保版本在0.7.0或以上 $ npm install dva-cli -g $ dva -v 0.7.6 2.创建新应用 $ dva new dva-quickstart 3.启动程序 $ cd dva-quickstart $ npm start 4.使用antd框架 $ npm install antd babel-plugin-import --save

webpack构建react项目(一)

前言 下面是我们使用到技术栈: webpack + react + redux + react-router + react-thunk + ES6 + .... 注意事项: 建议使用npm5.X 或者 yarn 包管理工具(最好不要使用cnpm,虽然安装包速度上很快,但是在文件关联上会有坑,之前用的时候被坑过) 一.新建项目目录 config : webpack 配置文件 dist: 打包后代码 src: 源码目录 二.基础配置 安装基础的包 // 生成默认package.josn 文件 np

webpack构建react项目的配置文件

webpack是一个模块打包工具,处理模块之间的依赖同时生成对应模块的静态资源. webpack把项目中所有的静态文件都看作一个模块 模快之间存在着一些列的依赖 多页面的静态资源生成(打包之后生成多个静态文件,涉及到代码拆分) webpack.config.js文件 //__dirname是node.js中的一个全局变量,它指向当前执行脚本所在的目录 //webpack.config.js const HtmlWebpackPlugin = require('html-webpack-plugi

vue+webpack+vue-cli+WebStrom 项目搭建

作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.安装 webpack 和vue-cli 模块: npm install webpack -g npm install vue-cli -g 2.进入到新建项目的目录里面执行以下命令新建项目: vue init webpack hiibook_find 3.然后进入到使用cd 命令进入到新建的hiibook_find目录下面安装package.json中的模块: cnpm install 4.然后执行命令看是

react项目搭建

1.下载安装node.js,需要node.js环境. 2.经过挑选,决定选择creat-react-app这个项目脚手架,然后输入指令安装          $ npm install -g create-react-app 3.创建项目,然后输入指令(my-app是名字,自己取)          $ create-react-app my-app 4.进入项目,然后输入指令          $ cd my-app 5.运行项目,然后输入指令          $ npm start 6.选

基于webpack的vue项目

参考文档:https://segmentfault.com/a/1190000012789253?utm_source=tag-newest webpack配置参考了vue-cli提供webpack-simple模板,这也是vue-cli里面最简单的一个webpack配置,非常适合从零开始学习(自行安装node.js) 1.查看npm -v是否已经安装 npm -v 2.安装webpack npm i webpack -g 3.安装webpack4 npm i webpack-cli -g 4.