从一个原生HTML/CSS/JS模式的网页改造到ReactJS模块化的结构,需要以下步骤:

(1)引用ReactJS框架 ->(2)使用webpack 工具 -> (3)配置webpack使之识别各种语法:JAX,HTML,CSS等

以下是一些坑:

1.ReactJS框架并不能实现JS的模块化

纯ReactJS其实和JqueryTemplate差不多,可以把HTML写成一个模板,然后以插入到某个DIV里的方式来实现HTML的模板化。

但是单纯靠ReactJS这个框架,其实这并没有实现JS的模块化,只是实现了HTML的模板化。

JS的模块化,通过import、require的方式导入其他JS模块,需要依靠“build”。

webpack就是实现JS模块化的比较流行的方式。

2.webpack打包时不识别JAX语法

webpack在build工程的时候,如果不用loader,只能识别原生JS,并不能识别JSX语法,同样HTML和CSS也不能识别。

所以需要一份webpack的配置文件,并使用npm安装相应的语法加载器,即loader。

比如下面这份webpack配置文件,就实现了JS的编译,CSS的编译,HTML的拷贝。

3.webpack打包时不识别ES6语法,如import等

安装babel-loader对es2015的识别,即 babel-preset-es2015

然后在webpack的config文件中配置:

{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['react','es2015']
}
},

4.react和react-dom

又被旧教程坑,以前只有react框架,所以都是React.render,后来分离出了ReactDom专门用来操作JSXDOM内容。

所以现在最新的都是ReactDom.render,但是ReactDom里又有用到React的API,所以如果使用到ReactDom,必须先import React,否则会报错 react undefined.

5.production模式

webpack没有设置成production模式下,直接使用,会冒出一大堆警告来。

需要在webpack里配置build process的环境变量为生产模式。

new webpack.DefinePlugin({
'process.env':{
'NODE_ENV': JSON.stringify('production')
}
}),

6.warning

可以通过下面的语句消除好几个终端窗口的warning

new webpack.optimize.UglifyJsPlugin({
compress:{
warnings: false
}
})

  

一份完整的配置文件:

demo:https://github.com/rayshen/reactjs-webpack-demo

参考链接:

http://www.tuicool.com/articles/fQB3IjE

http://www.cnblogs.com/Leo_wl/p/4862714.html

ReactJS webpack实现JS模块化使用的坑的更多相关文章

  1. webpack学习2.1 模块化开发(JS模块化&CSS模块化)

    一.JS模块化 命名空间,COMMONJS,AMD/CMD/UMD,ES6 module 1.什么是命名空间 库名.类别名.方法名 弊端:在命名空间重复生命,要记住完整的路径名(而且很长) var N ...

  2. JS模块化开发:使用SeaJs高效构建页面

    一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...

  3. Webpack:前端资源模块化管理和打包工具

    一.介绍: Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生 产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再 ...

  4. JS 模块化和打包方案收集

    1.这里想讨论的是拆分规则,不是在问哪个工具怎么使用.2.这里没有在想找正确答案,因为感觉这个问题要结合具体业务场景. 随着项目开发越来越大,一开始代码全打包到一个文件的方式,让文件越来越大,接下来要 ...

  5. 闲聊——浅谈前端js模块化演变

    function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ...

  6. webpack处理非模块化的几方法

    webpack处理非模块化文件有几方法,主要分为外链和webpack打包二种情况: 一.使用CDN外部链接的方法 官网文档External: https://webpack.github.io/doc ...

  7. js模块化加载器实现

    背景 自es6以前,JavaScript是天生模块化缺失的,即缺少类似后端语言的class, 作用域也只以函数作为区分.这与早期js的语言定位有关, 作为一个只需要在网页中嵌入几十上百行代码来实现一些 ...

  8. webpack3中文版使用参考文档--全面解析webpack.config.js

    Webpack目前官方发布的最新版本是3.1.0,相对于2.0的怎么本,在语法上没有变动,只是新增了功能.使用webpack,需要事先安装node.js,并对node.js生态有一些基本的了解,比如( ...

  9. js模块化/js模块加载器/js模块打包器

    之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7 ...

随机推荐

  1. Windows Form调用R进行绘图并显示

    R软件功能非常强大,可以很好的进行各类统计,并能输出图形.下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上. 1 前提准备 安装R软件,需要安装32位的R软件,6 ...

  2. 使用 ExecuteMultiple 提高批量数据加载的性能

    您可以使用 ExecuteMultipleRequest 消息在 Microsoft Dynamics CRM Online 2016 Update 和 Microsoft Dynamics CRM ...

  3. AngularJS HTML DOM& 事件

    AngularJS 为 HTML DOM 元素的属性提供了绑定应用数据的指令. ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性 <div ng-app= ...

  4. C#语言基础——递归

    递归 一.概念conception: 函数体内调用本函数自身,直到符合某一条件不再继续调用. 二.应满足条件factor: (1)有反复执行的过程(调用自身): (2)有跳出反复执行过程的条件(函数出 ...

  5. asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析

    这篇文章我们开始看一下ActionFilter,从名字上其实就大概知道ActionFilter就是Action上的Filter,对吧,那么Action上的Filter大概有几个呢??? 这个问题其实还 ...

  6. 常用ASCII CHR碼對照

    因為開發需求,把對照表留下來一下. Chr(0) Null Chr(29) 分组符 Chr(38) & Chr(48) 0 Chr(8) 退格 Chr(30) 記錄分離符號 Chr(39) ‘ ...

  7. Windows环境下的NodeJS+NPM+Bower安装配置

    npm作为一个NodeJS的模块管理,之前我由于没有系统地看资料所以导致安装配置模块的时候走了一大段弯路,所以现在很有必要列出来记录下.我们要先配置npm的全局模块的存放路径以及cache的路径,例如 ...

  8. [转]Asp.Net 用户验证(自定义IPrincipal和IIdentity)

    本文转自:http://www.cnblogs.com/amylis_chen/archive/2012/08/02/2620129.html Default.aspx 页面预览 默认情况下SignI ...

  9. Linux下安装jdk1.7、Apache-tomcat7

    首先说明下我的主机环境:主机:32位win7 虚拟机:VMware Workstation10.0.1 linux:红帽子centos6.4 jdk1.7 Apache-tomcat7 java环境需 ...

  10. 项目游戏开发日记 No.0x000003

    14软二杨近星(2014551622) 刚刚过去清明节, 意味着离交项目的时间, 还有三个星期, 有点着急了, 可是, 还是觉得无所适从... 项目进展: 刚刚过去的一周, 事非常多, 以至于, 进展 ...