文档章节

webpack1和webpack2版本的区别

hezhongjie
 hezhongjie
发布于 2017/05/03 11:46
字数 688
阅读 125
收藏 1

webpack1已结不再维护了,官方在主推webpack2,原先使用webpack1的用户,想要使用v2,只需要做几个配置小改动即可。

我们只关注常用的配置选项,不常用的不做解释。

1、resolve配置

以前你可能这么写

resolve: {
    extensions: ['', '.jsx', '.js', '.json'],
    modulesDirectories: ['node_modules', 'src'],
    alias: {
        actions: __dirname + `/src/actions`,
        components: __dirname + `/src/components`,
        containers: __dirname + `/src/containers`,
        reducers: __dirname + `/src/reducers`,
        store: __dirname + `/src/store`
    }
}

现在你该这么写:取消了空字符串

resolve: {
    extensions: ['.js', '.jsx', '.less', '.scss', '.css'],
    modules: [
      path.resolve(__dirname, 'node_modules'),
      path.join(__dirname, './src')
    ]
  }

2、module配置

以前你可能这么写:module: {

loaders: [{
    test: /\.(js|jsx)$/,
    loaders: ['react-hot', 'babel-loader'],
    exclude: /node_modules/
}, {
    test:   /\.(less|css)$/,
    loader: "style-loader!css-loader!less!postcss-loader"
}, {
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'file?name=[md5:hash:base64:10].[ext]'
}, {
    test: /\.json$/,
    loader: 'json'
}, {
    test: /\.md$/,
    loader: 'file?name=[name].[ext]'
}]

}

现在你该这么写:

a、外层loaders改为rules

b、内层loader改为use

c、所有插件必须加上-loader,不再允许缩写,所以react-hot不需要再配置。

d、不再支持使用!连接插件,请使用数组形式。

e、json-loader已经被移除,不需要手动添加,webpack会帮你处理好这些事情。

module: {
      rules: [{
          test: /\.(js|jsx)$/,
          use: ['babel-loader'],
          exclude: /node_modules/,
          include: path.join(__dirname, 'src')
      }, {
          test: /\.(less|css)$/,
          use: ["style-loader", "css-loader", "less-loader", "postcss-loader"]
      }, {
          test: /\.(png|jpg|gif|md)$/,
          use: ['file-loader?limit=10000&name=[md5:hash:base64:10].[ext]']
      }, {
          test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
          use: ['url-loader?limit=10000&mimetype=image/svg+xml']
      }],
  }
};

3、plugins配置

以前你可能这么写:

new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new webpack.optimize.UglifyJsPlugin()

现在你该这么写:

a、移除了OccurenceOrderPlugin 和 NoErrorsPlugin

b、更多plugins配置请参考 https://webpack.js.org

new webpack.HotModuleReplacementPlugin(),
new webpack.optimize.UglifyJsPlugin()

==============================================================

以上几个常用配置变化的比较明显,没有修改的配置会报错导致webpack无法使用,请注意遵守webpack2规则。

最后贴上一份webpack.config.js基础配置,查看该配置完整项目请点击:react-webpack2

var path = require('path');
var webpack = require('webpack');
var autoprefixer = require('autoprefixer');
var precss = require('precss');

//判断当前运行环境是开发模式还是生产模式
const nodeEnv = process.env.NODE_ENV || 'development';
const isPro = nodeEnv === 'production';

console.log("当前运行环境:", isPro)

var plugins = []
if (isPro) {
  plugins.push(
      new webpack.optimize.UglifyJsPlugin({
          compress: {
              warnings: false
          }
      }),
      new webpack.DefinePlugin({
          'process.env':{
              'NODE_ENV': JSON.stringify(nodeEnv)
          }
      })
  )
} else {
  plugins.push(
      new webpack.DefinePlugin({
          'process.env':{
              'NODE_ENV': JSON.stringify(nodeEnv)
          },
          BASE_URL: JSON.stringify('http://localhost:9009'),
      }),
      // new webpack.optimize.OccurenceOrderPlugin(),
      new webpack.HotModuleReplacementPlugin()
      // new webpack.NoErrorsPlugin()
  )
}

module.exports = {
  devtool: false,
  entry: {
    app: [
      'webpack-hot-middleware/client?path=http://localhost:3011/__webpack_hmr&reload=true&noInfo=false&quiet=false',
      'babel-polyfill',
      './src/index'
    ]
  },
  output: {
    filename: '[name].js',
    path: path.join(__dirname, 'build'),
    publicPath: 'http://localhost:3011/build/',
    chunkFilename: '[name].js'
  },
  // BASE_URL是全局的api接口访问地址
  plugins,
  // alias是配置全局的路径入口名称,只要涉及到下面配置的文件路径,可以直接用定义的单个字母表示整个路径
  resolve: {
    extensions: ['.js', '.jsx', '.less', '.scss', '.css'],
    modules: [
      path.resolve(__dirname, 'node_modules'),
      path.join(__dirname, './src')
    ]
  },

  module: {
      rules: [{
          test: /\.(js|jsx)$/,
          use: ['babel-loader'],
          exclude: /node_modules/,
          include: path.join(__dirname, 'src')
      }, {
          test: /\.(less|css)$/,
          use: ["style-loader", "css-loader", "less-loader", "postcss-loader"]
      }, {
          test: /\.(png|jpg|gif|md)$/,
          use: ['file-loader?limit=10000&name=[md5:hash:base64:10].[ext]']
      }, {
          test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
          use: ['url-loader?limit=10000&mimetype=image/svg+xml']
      }],
  }
};

本文转载自:https://segmentfault.com/a/1190000008671104

共有 人打赏支持
hezhongjie
粉丝 4
博文 102
码字总数 51472
作品 0
程序员
私信 提问
升级到Webpack2坑——热加载不自动刷新

问题: 升级 Webpack1 到 Webpack2 之后, 开发模式下热加载不起作用。控制台显示“App hot update...”。但页面不自动刷新。 一直hot update...但不自动刷新 解决办法: 去掉WebpackDevSer...

Evelynzzz
01/09
0
0
webpack3新特性简介

升级到webpack3 升级到webpack3,只需要通过npm安装即可:    webpack3几乎与webpack2完美兼容,除了会影响一些插件的使用,官方给出的数据是:98%的用户升级后,没有影响webpack功能的正常...

shptc
2017/06/23
0
0
React router动态加载组件-适配器模式的应用

前言 本文讲述怎么实现动态加载组件,并借此阐述适配器模式。 一、普通路由例子 以上是最常见的。在简单的单页应用中,这样写是ok的。因为打包后的单一js文件也不过200k左右,之后,对加载性...

我是leon
09/12
0
0
quasar-framework学习笔记

官方网站: http://quasar-framework.org/ 一、安装 1、 安装quasar-cli npm install -g quasar-cli 2、 使用quasar starter kits初始化项目 quasar提供了多套开发套件,可以使用quasar list...

陈安一
2017/09/18
0
0
quasar-framework学习笔记

官方网站: http://quasar-framework.org/ 一、安装 1、 安装quasar-cli npm install -g quasar-cli 2、 使用quasar starter kits初始化项目 quasar提供了多套开发套件,可以使用quasar list...

陈安一
2017/09/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
7
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
13
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
14
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
8
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部