引言

  最近React作为当前最为火热的前端框架。最近也相继而出来相关ES7的新语法。

  当然,在使用React开发web项目的时候,不得不提到的就是与之配套的相应的打包技术,之前上文已经简单的提到React+webpack的相关环境搭建。

  不过昨天,在技术群聊里,又有人提到,如何更好的利用webpack进行开发与打包。那么今天,我就用一个例子来解释一下,利用webpack来打包react项目与发布的相关配置(包含Request请求和React-router的路由跳转哦)。

准备工作

  当然需要安装WebStrom和node.js啦~至于下载地址,请看上文:React+Webpack+ES6环境搭建(自定义框架)

让我们跑起来吧

  首先来说说,本项目基本用到的一些开发组件(package.json):

  1. 开发中需要用到的,我全部放在devDependencies(npm install ...... --save-dev)中;
  2. 项目中有用到的组件,我全部放在dependencies(npm install ...... --save)中;
"devDependencies": {
"babel-core": "^6.18.2",
"babel-loader": "^6.2.8",
"babel-polyfill": "^6.16.0",
"babel-preset-latest": "^6.16.0",
"babel-preset-react": "^6.16.0",
"open": "0.0.5",
"react-hot-loader": "^3.0.0-beta.6",
"webpack": "^1.13.3",
"webpack-dev-server": "^1.16.2"
},
"dependencies": {
"echarts": "^3.3.1",
"isomorphic-fetch": "^2.2.1",
"lodash": "^4.17.2",
"react": "^15.4.0",
"react-dom": "^15.4.0",
"react-router": "^3.0.0"
}

  接下来,就是server.js的配置,利用于调试以及用户服务端口配置

/**
* 创建时间:2016年9月19日 10:12:44
* 创建人:JaminHuang
* 描述:用于服务端口配置
*/
'use strict';
var open = require('open');
var webpack =require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config.js'); var compiler = webpack(config);
var server = new WebpackDevServer(compiler, {
publicPath:config.output.publicPath,
hot:true,
historyApiFallback: true,
quiet: false,
noInfo: false,
filename: "index.js",
watchOptions: {
aggregateTimeout: 300,
poll: 1000
},
headers: {"X-Custom-Header": "yes"},
stats: {colors: true}
}); server.listen(3010, function (err, result) {
if (err)console.log(err);
open('http://localhost:3010');
});

server.js

  配置完成后,并且在建立index.js的主入口文件后(具体怎么建立,请看前文环境搭建,这里就不重复讲了)。下面就是核心,webpack.config.js的配置啦。不过这里项目用引用了热加载(react-hot-loader),而该组件在更新版本3.0.0之后,有一些小坑,需要修复,下文会提到。

  首先,可以配置调试文件(webpack.config.js)和发布配置文件(webpack.production.config.js)

'use strict';
var path = require('path');
var webpack = require('webpack'); var config = {
devtool: 'source-map',
entry: {
app: ['webpack-dev-server/client?http://localhost:3010', 'webpack/hot/dev-server', './src/index']
},
output: {
path: path.join(__dirname, 'public'),
publicPath: '/public/',
//chunkFilename: '[id].chunk.js',
filename: "bundle.js"
},
module: {
loaders: [
{test: /\.js$/, loader: 'babel', include: path.join(__dirname, 'src')}
]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
//new webpack.optimize.CommonsChunkPlugin('shared.js'),
new webpack.DefinePlugin({
'process.env': {
'DEBUG': true
}
})
]
};
module.exports = config;

webpack.config.js

'use strict';
var path = require('path');
var webpack = require('webpack'); module.exports = {
devtool: false,
debug: false,
stats: {
colors: true,
reasons: false
},
entry: './src/index',
output: {
path: path.join(__dirname, 'public'),
publicPath: '/public/',
//chunkFilename: '[id].chunk.js',
filename: 'bundle.js'
},
plugins: [
new webpack.optimize.DedupePlugin(),
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production'),
'DEBUG': false
}
}),
//new webpack.optimize.CommonsChunkPlugin('shared.js'),
new webpack.optimize.UglifyJsPlugin({
compressor: {
warnings: false
}
}),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.AggressiveMergingPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
{test: /\.js$/, loader: "babel", exclude: /node_modules/}
]
}
};

webpack.production.config

  由于调试文件中,引用了热加载的问题,所以这里也提一下上面之前遇到的坑。由于3.0.0版本的react-hot-loader,对于webpack中配置的有些loaders语法不识别,

  之前版本的写法:

module: {
loaders: [
{test: /\.js$/, loaders: ['react-hot', 'babel'], include: [path.join(__dirname, 'src')]}
]
},

  调整之后的写法,别写需要在之前配置的.babelrc文件中添加一行配置(当然可以写进):

{
"plugins": ["react-hot-loader/babel"]
}

  webpack.config中的配置

module: {
loaders: [
{test: /\.js$/, loader: 'babel', include: path.join(__dirname, 'src')}
]
},

  最后,在package.json中配置命令,方便执行就行了:

"scripts": {
"start": "node server.js",
"prod": "webpack --config webpack.production.config.js"
},

  这样一些都配置完成了,如需要调试则输入"npm start"就行,如需要发布就可以输入"npm prod"即可

有关发布

  这里在说一下,如果想要发布项目的时候,在输入"npm prod"之后,(之前根据webpack已经配置好了目录)只需要到项目跟目录下把public文件夹和index.html拷出来(因为这里举例的webpack发布配置,我并没有将index.html也打包进入public文件夹,所以需要多打包一下)

  拷出来后,则可以通过IIS进行项目发布啦。(不过如果利用IIS的话,需要添加URL重写工具)以及在发布的根目录下配置web.config文件,配置URL重写。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<!-- todo: 也许应该过滤掉静态文件 -->
<rewrite>
<rules>
<rule name="Main Rule" stopProcessing="true">
<match url="^(?:(?!api).)+" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

扩展内容

  这里再,说一些相关扩展的内容:Request请求处理。本项目中利用了一些isomorphic-fetch组件用于帮助请求,项目中我配置了一个公共请求组件:

'use strict';
import fetch from 'isomorphic-fetch';
const baseUrl = "http://xxx"; export function FetchPost(url, data) {
return fetch(`${baseUrl}/${url}`, {
headers: {"Content-Type": "application/json"},
method: 'POST',
body: JSON.stringify(data)
}).then(response=> {
return response.json();
})
}

  调用方式:

Request.FetchPost("api/Gather/Sign", data).then(json=>{
if (条件 ) {
//成功执行....
}
else {
//失败执行....
}
})

附录

  最后附上我的GitHub上该项目的Demo,如果有需要可以down下来实际操作一下,当然,请别忘记给个Star哈~内容中有分支,一个是项目搭建,一个是百度EChart的Demo,本文例子用master这个分支就可。

  https://github.com/JaminHuang/EChartDemo

React项目构建(利用webpack打包)的更多相关文章

  1. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器开放平台利用 webpack 打包压缩后端代码

    需求背景 javaScript的用途是解决页面交互和数据交互,最终目的是丰富客户端效果以及数据的有效传递. 并且具有良好的用户体验. javaScript可以快速实现页面交互,即js操作html的do ...

  2. (转)react 项目构建

    原文:https://segmentfault.com/a/1190000016342792 写在前面 每次构建react项目的时候都会配置一大堆东西,时间久了就会忘记怎么配置.为了方便自己记忆也为了 ...

  3. react项目搭建及webpack配置

    1,配置webpack npm install -g webpack                       webpack的cli环境 npm install -g webpack-dev-se ...

  4. 《React+Redux前端开发实战》笔记1:不涉及React项目构建的Hello World案例

    本小节实现一个不涉及项目构建的Hello World. [React的第一个Hello World网页] 源码地址:https://jsfiddle.net/allan91/2h1sf0ky/8/ & ...

  5. 利用webpack打包自己的第一个Vue组件库

    先说一下这篇文章的诞生原因.我们有一个这样的项目,类似或者说就是一个仪表板-Dashboard,其中的各个部分可能不是一个部门写的……我们需要提供拖拽布局(大小和位置)和展示的能力.要实现这样一个功能 ...

  6. react项目构建

    1.react脚手架 npm install -g create-react-app create-react-app myproject 2.页面配置(bootcdn) <script src ...

  7. Vue - 前端本地项目开发过程中webpack打包内存泄漏问题解决方法

    编译项目出现如下错误: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 原因: n ...

  8. react项目构建中的坑—淘宝镜像安装后要设置

    基本的搭建步骤参考博客:https://blog.csdn.net/qq_27727251/article/details/86593415 这里要强调的坑是:安装完淘宝镜像要将其设置为默认Regis ...

  9. vue项目 webpack打包后,图片路径是绝对路径

    vue项目,使用webpack打包,虽然在全局把路径改成了相对的路径,但是图片引用的路径还是异常的,解决办法如下: 1.config文件夹下index.js中: assetsPublicPath:&q ...

随机推荐

  1. Android 强制软键盘关闭

    在Android开发过程中,有时候我们会有强制关闭软键盘的需求.比如说:现在有一个文本编辑框(testEt)和一个按钮(testBtn),我们现在点击文本编辑框testEd,这时会弹出软键盘,然后我们 ...

  2. oracle常规操作

    dbms_job.broken(job1,true);

  3. 大数乘法 poj2389

    Bull Math Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14972   Accepted: 7695 Descri ...

  4. 搭建hadoop、hdfs环境--ubuntu(完全分布式)

    最近在学习hadoop相关知识,就在本机上安装了hadoop,遇到了一些坑,也学到了不少.仅此记录我的安装过程,及可能遇到的问题.供参考.交流沟通见页末. 软件准备 >  虚拟机(VMware) ...

  5. hp soap扩展最全说明,附天气预报调用的例子

    自从php5开始,我们可以不用通过php nusoap来创建php soap web service 和调用 soap了,php5内置了 soap扩展.只需要在php.ini中开启soap的exten ...

  6. Vue学习之路第九篇:双向数据绑定 v-model指令

    1.学习准备: ①:双向数据绑定可以简单理解为:后端定义的数据改变,前端页面展示的时候会自动改变,数据通过前端页面修改的时候,后端定义的数据内容也会随之改变. ②:指令中只有v-model可以实现双向 ...

  7. POJ 1743 [USACO5.1] Musical Theme (后缀数组+二分)

    洛谷P2743传送门 题目大意:给你一个序列,求其中最长的一对相似等长子串 一对合法的相似子串被定义为: 1.任意一个子串长度都大于等于5 2.不能有重叠部分 3.其中一个子串可以在全部+/-某个值后 ...

  8. 设置PATH 环境变量、pyw格式、命令行运行python程序与多重剪贴板

    pyw格式简介: 与py类似,我认为他们俩卫衣的不同就是前者运行时候不显示终端窗口,后者显示 命令行运行python程序: 在我学习python的过程中我通常使用IDLE来运行程序,这一步骤太过繁琐( ...

  9. How to check Open vSwitch version and supports OpenFlow version

    Open vSwitch (OVS) is an open-source virtual switch, featuring programmable switch forwarding capabi ...

  10. 分库代价高的情况下,如何优化ES解决亿级数据量检索

    数据平台已迭代三个版本,从一开始遇到很多常见的难题,到现在终于有片段时间整理一些已完善的文档,在此分享以供所需朋友的实现参考,但愿能帮助大家少走些弯路,在此篇幅中偏重于ElasticSearch的优化 ...