webpack配置出react

前端人员都知道,webpack能替代部分 grunt/gulp 的工作,比如打包、压缩混淆、图片转base64等。

比如但我我就是喜欢vue的webpack,但是我需要用react做项目,那么怎么办?

不用着急,以下就是webpack配置react的方法,来吧,大家一起来配置

1、创建package.json

window:npm init --yes

mac:sudo npm init --yes

2、安装react、react-dom、babelify、babel-preset-react(可跳过)

windows:npm install --save-dev react react-dombabelify babel-preset-react

mac:sudo npm install --save-dev react react-dombabelify babel-preset-react

3、安装babel-preset-es2015(可跳过)

window:npm install babel-preset-es2015 --save-dev

mac:sudo npm install babel-preset-es2015 --save-dev

4、局部安装(可跳过)

window:npm install webpack --save-dev

mac:sudo npm install webpack --save-dev

5、局部安装webpack-dev-server(可跳过)

window:npm install webpack-dev-server —-save-dev

mac:sudo npm install webpack-dev-server —-save-dev

6、修改package.json

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1",

"build": "node build/build.js",

"watch": "webpack --watch --config webpack.dev.js",

"dev": "webpack-dev-server --inline --config build/webpack.dev.conf"

}


"engines": {

 "node": ">= 6.0.0",

 "npm": ">= 3.0.0"

 },

 "browserslist": [

 "> 1%",

 "last 2 versions",

 "not ie<= 8"

 ]


"devDependencies": {

 "babel-core": "^6.26.0",

 "babel-loader": "^7.1.2",

 "babel-plugin-react-html-attrs": "^2.1.0",

 "babel-plugin-react-transform": "^2.0.2",

 "babel-plugin-transform-runtime": "^6.23.0",

 "babel-polyfill": "^6.9.1",

 "babel-preset-env": "^1.3.2",

 "babel-preset-es2015": "^6.24.1",

 "babel-preset-react": "^6.24.1",

 "babel-preset-stage-0": "^6.5.0",

 "babel-preset-stage-2": "^6.22.0",

 "chalk": "^2.0.1",

 "clean-webpack-plugin": "^0.1.17",

 "copy-webpack-plugin": "^4.0.1",

 "css-loader": "^0.28.7",

 "csv-loader": "^2.1.1",

 "extract-text-webpack-plugin": "^3.0.2",

 "file-loader": "^1.1.5",

 "friendly-errors-webpack-plugin": "^1.6.1",

 "html-webpack-plugin": "^2.30.1",

 "inline-source-map": "^0.6.2",

 "less": "^3.0.4",

 "less-loader": "^4.1.0",

 "node-notifier": "^5.1.2",

   "optimize-css-assets-webpack-plugin": "^3.0.0",

 "ora": "^1.3.0",

 "postcss-import": "^10.0.0",

 "postcss-loader": "^2.0.6",

 "precss": "^2.0.0",

 "react-native": "^0.55.4",

 "react-native-drawer-layout": "^2.0.0",

 "react-style-loader": "^1.0.1",

 "react-transform-hmr": "^1.0.4",

 "rimraf": "^2.6.0",

 "semver": "^5.3.0",

 "shelljs": "^0.7.6",

 "style-loader": "^0.19.0",

 "ts-loader": "^2.3.7",

 "uglifyjs-webpack-plugin": "^0.4.6",

 "url-loader": "^0.6.2",

 "webpack": "^3.6.0",

 "webpack-dev-middleware": "^1.12.0",

 "webpack-dev-server": "^2.9.1",

 "webpack-merge": "^4.1.0",

 "webpack-post-compile-plugin": "^0.1.2",

 "xml-loader": "^1.2.1",

 "whatwg-fetch": "^2.0.3"

 },

 "dependencies": {

 "ant-mobile": "0.0.0",

 "antd-mobile-demo-data": "^0.2.0",

 "axios": "^0.18.0",

 "es6-promise": "^4.2.4",

 "eslint-plugin-react-native": "^3.2.1",

 "history": "^4.7.2",

 "lodash": "^4.17.4",

 "moment": "^2.21.0",

 "rc-form": "^2.2.0",

 "react": "^16.2.0",

 "react-dom": "^16.2.0",

 "react-lazyload": "^2.3.0",

 "react-mixin": "^4.0.0",

 "react-redux": "^5.0.7",

 "react-router-dom": "^4.2.2",

 "redux": "^3.7.2",

 "redux-thunk": "^2.2.0"

 }

7、执行:

windows:npm install

mac:sudo npm install

8、将vue中的build文件夹、config文件夹、.babelrc文件复制到项目根目录下面

9、打开.babelrc文件,修改为:

{

 "presets": [

 ["env", {

 "modules": false,

 "targets": {

 "browsers": ["> 1%", "last 2 versions", "not ie<= 8"]

 }

 }],

 "stage-2"

 ],

 "plugins": ["transform-runtime"]

}

10、    打开build/utils.js

修改1:

constcssLoader = {

 loader: 'css-loader',

 options: {

sourceMap: options.sourceMap,

 modules: true,//开启css模块化

localIdentName: '[local]--[hash:base64:6]', //开启模块化后生成的class 名字

 }

 }

 修改2:

if (options.extract) {

 return ExtractTextPlugin.extract({

 use: loaders,

publicPath: '../../',//解决build cssbgimg 加载路径不对问题

 fallback: 'react-style-loader'// 修改vue-style-loader

 })

 } else {

 return ['react-style-loader'].concat(loaders)// 修改vue-style-loader

 }

 }

11、    打开build/webpack.base.conf.js

修改1:

entry: {

 babel: ['babel-polyfill'],

 app: './src/index.js',

redux:['redux','react-redux']

 },

修改2:

output: {

 path: config.build.assetsRoot,

 filename: '[name].js',

publicPath: process.env.NODE_ENV === 'production'

 ? config.build.assetsPublicPath

 : config.dev.assetsPublicPath,

libraryTarget: "umd"//用于外部引入的react.js 等

 }


删除:

{

 test: /\.vue$/,

 loader: 'vue-loader',

 options: vueLoaderConfig

 }

将:

{

 test: /\.js$/,

 loader: 'babel-loader',

 include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]

 }

修改为:

{

 test: /\.(js|jsx)$/,

 loader: 'babel-loader',

 //include: path.resolve(__dirname, "src"),

 include: resolve("src"),

 exclude: /node_modules/,

query:{

 presets: ['es2015',"react"],

       plugins:['react-html-attrs']//解决clasName的问题

 }

}

增加:

{

 test:/\.css$/,//对目录里面非node_modules,src/common目录下面的css文件开启模块化,页面里引用时候以模块方式引用

use:['style-loader',

 {

 //loader: 'css-loader?modules&importLoaders=1&localIdentName=[name]_[local]__[hash:base64:5]',

               loader:'css-loader',

 options: {

 module: true, //开启css模块化

                   //[path]-[name]-[local]-[hash:base64:6]

localIdentName: '[local]-[hash:base64:6]'

 },

 }

 ],

       exclude:[//排除这两个文件夹下面的css文件

           resolve('node_modules'),

 //resolve('src/assets/css/common')

 ]

 },{

 test:/\.css$/,

use:['style-loader','css-loader'],

 include:[//样式只应用到这两个文件夹下面的css文件中

 resolve('node_modules'),

 //resolve('src/assets/css/common')

 ]


}

删除:

constvueLoaderConfig = require('./vue-loader.conf')

在这个页面的开头增加:

varPostCompilePlugin = require('webpack-post-compile-plugin');

constExtractTextPlugin = require("extract-text-webpack-plugin");


在module里增加插件

module: {

},

plugins: [

 // ...

 new PostCompilePlugin(),

 new ExtractTextPlugin({

 filename: utils.assetsPath('css/[name].[contenthash].css')

 })

 ]


12、    打开build/webpack.dev.conf.js将下面代码删除或注释掉

module: {

 rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })

 },

13、    打开build/webpack.prod.conf.js将下面代码删除或注释掉

module: {

 rules: utils.styleLoaders({

sourceMap: config.build.productionSourceMap,

 extract: true,

usePostCSS: true

 })

 },


接下来就是运行测试啦。


在项目中建立文件夹dist,static,src文件夹,在根目录建立index.html文件,在src文件夹下面建立index.js文件。


index.html文件代码如下:

首页

<html>

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/>

<meta name="format-detection" content="telephone=no,email=no,date=no,address=no">

<title id="title">首页</title>

</head>

<body>

<div id="app"></div>

</body>

首页

</html>

首页

首页


index.js文件里的代码如下:

var React=require("react");

varReactDOM=require("react-dom");

class Index extends React.Component{

render(){

return(

 Hello World!

 );

 }

}

ReactDOM.render(,document.getElementById("app"));



然后进入项目根目录下面运行

npm run dev

如果是正式打包上线运行:

npm run build


ok,咱们这样就可以在react上使用webpack了,是不是很简单!

前端爱好者加微信  13717840919

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容