# 部署React+webpack工程的步骤
ps:以Mac os系统做开发环境。因为npm现在使用灰常的慢,所以我使用淘宝境像cnpm。

1,准备工作:
先确保存已经安装了node.js;

2,文件部署:
(1),在终端中找到react-build项目的目录,键入cnpm init初始化一个package.json文件,该文件是存放接下来项目用的一些模块,
在终端中根据提交一步步的输入,或者可以直接新建一个package.json文件,文件内容大概如下:

{
"name": "yes",
"version": "1.0.0",
"description": "react-build",
"main": "index.js",
"scripts": {
"test": "no"
},
"author": "Chen Leepyng",
"license": "UNLICENSED",
"dependencies": {
"react": "^15.3.1",
"react-dom": "^15.3.1",
"react-mobile-picker": "^0.1.10",
"react-slick": "^0.13.1"
},
"devDependencies" {
"babel-core": "^6.13.2",
"babel-loader": "^6.2.8",
"babel-preset-react": "^6.11.1",
"css-loader": "^0.23.1",
"es6-promise": "^3.2.1",
"esformatter-jsx": "^7.4.0",
"eslint": "^3.11.1",
"eslint-config-airbnb": "^13.0.0",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^3.0.1",
"eslint-plugin-react": "^6.7.1",
"file-loader": "^0.8.5",
"html-webpack-plugin": "^2.24.1",
"iscroll": "^5.2.0",
"iscroll-component": "^2.0.2",
"react": "^15.0.2",
"react-addons-linked-state-mixin": "^15.1.0",
"react-document-title": "^2.0.2",
"react-dom": "^15.0.2",
"react-iscroll": "^1.0.2",
"react-router": "^2.4.0",
"react-weui": "^0.4.0",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"webpack": "^1.13.3",
"webpack-dev-server": "^1.15.1",
"webpack-encoding-plugin": "^0.0.2",
"webpack-livereload-plugin": "^0.8.2",
"weui": "^0.4.2",
"whatwg-fetch": "^1.0.0"
}
}

保存package.json文件。其中“dependencies”是包发布后正常执行时所需要的,“devDependencies”里的依赖只有在开发时候才需要

(2) 新建完package.json文件后,在终端输入:cnpm install --save-dev完成依赖的安装。
(3)此时可以看到,项目所需要的依赖已经完成安装,(ps:因为这个依赖用的是我现在开发的版本,所以可以手动去更新你想要的新版本)
(4) 在react-build项目根目录中新建一个webpack.config.js,内容如下:

var path = require('path');
var webpack = require('webpack');
var LiveReloadPlugin = require('webpack-livereload-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var EncodingPlugin = require('webpack-encoding-plugin'); module.exports = {
//插件项
plugins: [
// 移除打包后的警告
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("production")
}
}),
new LiveReloadPlugin({
'port': 35729,
'appendScriptTag': false,
'ignore': null
}),
new HtmlWebpackPlugin({
inject: true,
hash: true,
cache: true,
filename: '../index.html',
template: 'index.html.tpl'
}),
new EncodingPlugin('UTF-8')
],
//页面入口文件配置
entry: {
'main': path.resolve(__dirname, './src/main.js'),
},
//入口文件输出配置
output: {
path: path.resolve(__dirname, 'dist/'),
filename: '[name].js',
},
// 监听文件变化
watch: true,
module: {
//加载器配置
loaders: [{
test: /\.jsx?$/, // 用正则来匹配文件路径,这段意思是匹配 js 或者 jsx
loader: 'babel-loader', // 加载模块 "babel" 是 "babel-loader" 的缩写
exclude: /node_modules/,
query: {
presets: ['react']
}
}, {
test: /\.css$/,
loader: "style-loader!css-loader"
}, {
test: /\.jpg$/,
loader: "file-loader"
}, {
test: /\.png$/,
loader: "url-loader?mimetype=image/png"
}]
}
};

文件中已经写好了一些常用的配置,webpack watch的好处就是编辑文件过程中,保存文件的时候会实时编译并打包文件,并在出错的时候报错(关于webpack的使用可以找些相关的资料)

(5)完成上述后,在目录src中新建main.js文件,main.js文件在这里将作为一个路由,实现单页面应用的真谛;内容大概如下

'use strict';

require('./../node_modules/weui/dist/style/weui.min.css');

var React = require('react');
var ReactDOM = require('react-dom');
var ReactRouter = require('react-router'); var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var Link = ReactRouter.Link;
var history = ReactRouter.hashHistory; var Home = require('./index.js');//此次写的一些页面的路径,对应<Route path="login" component={Home}/>,当在浏览器中输入'xxx/login'后可以访问到home下的内容。具体请实践中实现咔咔; var index = React.createClass({
render: function() {
return (
<div>
{this.props.children}
<Home/>
</div>
);
}
}) var msg = React.createClass({
alert: function() {
alert(1)
},
render: function() {
return (
<a onClick={this.alert}>msg</a>
)
}
}) // 主页
var AppContent = React.createClass({
render: function() {
return (
<div>
{this.props.children}
</div>
)
}
})
var mainCom = ReactDOM.render(
<Router history={history} component={AppContent}>
<Route path="/" component={index}>
<Route path="msg" component={msg} />
</Route>
<Route path="home" component={Home}/> </Router>,
document.getElementById('app')
);

有一些页面需要传参数;只需要这样写就可以<Route path="login/:params" component={Home}/>
(6)在react-build项目根目录中新建一个index.html,内容如下:

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
<meta name="format-detection" content="telephone=no">
<title>react-bulid </title>
</head> <body id="body">
<div id="app" class="container"></div> <script type="text/javascript" src="dist/main.js?723919e7acb25944e198"></script></body> </html>

同时新建一个index.html.tpl文件。
内空为:

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
<meta name="format-detection" content="telephone=no">
<title>react-build</title>
</head> <body id="body">
<div id="app" class="container"></div> </html>

完成并保存文件。
(7)此时文件已经基本部署完成。在终端键入webpack打包这个项目,会看到有一个dist文件生成,里面有一个main.js文件,此文件就是整个项目的精髓了,项目所有的功能都整合在一个文件中。(ps:此中带来的问题就是样式会被统一,因此,在写样式的时候,注意不能同名出现)

3,上浏览器测试:
在浏览器中直接打开index.html,理论上出的Hello world表示你已经部署成功。
在src目录中添加:page1.js作路由测试。
并在manin.js添加

var page1 = require('./page1.js');

和:

<Route path="page1" component={Page1}/>

在刚刚打开的浏览地址栏中#/后输入page1,xx/#/page1,
就可以看到新添加的页面了。

4.以上就是整修项目的部署了。^_^

文件地址:https://github.com/leepyng/react-build

部署React+webpack工程的步骤的更多相关文章

  1. React Native工程中TSLint静态检查工具的探索之路

    建立的代码规范没人遵守,项目中遍地风格迥异的代码,你会不会抓狂? 通过测试用例的程序还会出现Bug,而原因仅仅是自己犯下的低级错误,你会不会抓狂? 某种代码写法存在问题导致崩溃时,只能全工程检查代码, ...

  2. 我和我的广告前端代码(六):webpack工程合并、也许我不需要gulp

    随着年初开始使用webpack重构公司的广告代码,已经有将近一年的时间了,需求也渐渐的稳定了.我想也是时候将这几个工程整理一下,顺带着处理一些历史问题. 由于当年各个业务线没有整合.需求也没有固定,考 ...

  3. 用React & Webpack构建前端新闻网页

    这是一篇给初学者的教程, 在这篇教程中我们将通过构建一个 Hacker News 的前端页面来学习 React 与 Webpack. 它不会覆盖所有的技术细节, 因此它不会使一个初学者变成大师, 但希 ...

  4. Tomcat 部署两个工程时,另一个访问出现404

    tomcat下部署两个工程时,只有一个可以访问,另一个出现404错误,该如何解决 在开发新项目的时候,有时候为了省时,直接把曾经做过的项目工程A拷贝成改名为B工程,然后再在B工程上进行功能的开发, 此 ...

  5. tomcat下部署两个工程时,只有一个可以访问,另一个出现404错误,该如何解决

    tomcat下部署两个工程时,只有一个可以访问,另一个出现404错误,该如何解决 在开发新项目的时候,有时候为了省时,直接把曾经做过的项目工程A拷贝成改名为B工程,然后再在B工程上进行功能的开发, 此 ...

  6. javaWeb项目部署到阿里云服务器步骤

    记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以 ...

  7. scss + react + webpack + es6

    scss + react + webpack + es6 写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果 ...

  8. Eclipse中STM32工程建立步骤

    前段时间一直在折腾linux系统上STM32的开发,网上一顿搜,费劲九牛二虎之力终于把环境搭好了(现在都有点忘了,后面再折腾环境搭建一定要写个教程,今天先不写了). 自从环境搭好之后,就基本抛弃MDK ...

  9. react +webpack 配置px2rem

    项目背景需要适配ipad 以及手机端,这时候当然要告别刀耕火种时代啦(自己算rem),因为已经有成熟的工具啦,即px2rem(https://www.npmjs.com/package/px2rem) ...

随机推荐

  1. [LeetCode] Find All Duplicates in an Array 找出数组中所有重复项

    Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...

  2. [LeetCode] Unique Paths 不同的路径

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  3. NPOI操作EXCEL(五)——含合并单元格复杂表头的EXCEL解析

    我们在第三篇文章中谈到了那些非常反人类的excel模板,博主为了养家糊口,也玩命做出了相应的解析方法... 我们先来看看第一类复杂表头: ...... 博主称这类excel模板为略复杂表头模板(蓝色部 ...

  4. VS2013快捷键及技巧

    VS2013快捷键很多,灵活使用常用快捷键及各项技巧可以让你事半功倍.下面的visual studio 2013快捷键和操作技巧你知道多少? 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一 ...

  5. JavaScript函数表达式、闭包、模仿块级作用域、私有变量

    函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表 ...

  6. echarts-在现实标题中显示百分比

    如图:需要在标题显示所占百分比 使用方式:途中标记部分 series : [{ name: '类型', type: 'pie', radius : '55%', center: ['50%', '60 ...

  7. cookie

    1.基本操作 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给 ...

  8. BZOJ 4742: [Usaco2016 Dec]Team Building

    4742: [Usaco2016 Dec]Team Building Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 21  Solved: 16[Su ...

  9. jQuery 运行机制

    1.Selector,查找元素.这个查找不但包含基于CSS1~CSS3的CSS Selector功能,还包含其对直接查找或间接查找而扩展的一些功能. 2.Dom元素的属性操作.Dom元素可以看作htm ...

  10. 企业SOA架构设计理论

    SOA简介 SOA(Service-Oriented Architecture,面向服务架构)是一种将信息系统模块化为服务的架构风格.拥有了服务之后,我们就可以迅速地将这些服务按不同方式重新组合,从而 ...