ReactJS webpack实现JS模块化使用的坑

从一个原生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.react和react-dom

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

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

4.production模式

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

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

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

5.warning

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

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

  

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

完整的webpack配置文件:

var webpack = require(‘webpack‘);
var path = require(‘path‘);
var ExtractTextPlugin = require(‘extract-text-webpack-plugin‘);
var HtmlWebpackPlugin = require(‘html-webpack-plugin‘);

var config = {
  entry: path.resolve(__dirname, ‘./src/js/main.js‘),
  output: {
    path: path.resolve(__dirname, ‘./build‘),
    filename: ‘./js/[name].js‘
  },
  module: {
    noParse: [],
    loaders: [
    {
      test: /\.js$/,
      loader: ‘babel-loader‘,
      exclude: /node_modules/,
      query:
      {
        presets:[‘react‘]
      }
    },
    {
      test: /\.jsx?$/,
      loader: ‘babel-loader‘,
      exclude: /node_modules/,
      query:
      {
        presets:[‘react‘]
      }
    },
    {
        test: /\.(css)$/,
        loader: ExtractTextPlugin.extract(‘style-loader‘,‘css-loader‘)
    },
    ]
  },
  plugins:[
    new HtmlWebpackPlugin({
      template: __dirname + "/src/index.html"
    }),
    new ExtractTextPlugin("./css/[name].css"),
    new webpack.DefinePlugin({
      ‘process.env‘:{
        ‘NODE_ENV‘: JSON.stringify(‘production‘)
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      compress:{
        warnings: false
      }
    })
  ]
};

module.exports = config;

参考链接:

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

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

时间: 2024-10-27 19:18:43

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

webpack学习笔记,前方有坑,请注意!!!!!

拖了好久,终于决定系统学习一下webpack(其实是自己懒,哈哈哈),学习任何东西都要亲自动手才行,learn by doing 才是最高效的学习方法,以下是我在学习webpack的心得和踩得的坑,希望看到的同行,可以少踩坑,文章写得烂,不要介意,哈哈哈,下面开始表演. 什么是webpack就不用介绍了,我主要列举遇到的问题. 使用步骤: 新建一个文件夹,然后npm init初始化一下,然后非全局安装webpack 1.打包时记得全局安装webpack,否则命令会报错:"webpack"

JS 模块化和打包方案收集

1.这里想讨论的是拆分规则,不是在问哪个工具怎么使用.2.这里没有在想找正确答案,因为感觉这个问题要结合具体业务场景. 随着项目开发越来越大,一开始代码全打包到一个文件的方式,让文件越来越大,接下来要做拆分,可具体的拆分规则又不是很熟悉,或者说,我没有一个很好的方案,所以想到这是一个值得讨论的话题,想提问的形式拿出来,请各位大神有这方面接触的分享一下自己的经验. 这个问题有一定局限性,因为不同的业务场景,可能拆分方式还有不同,所以,可否想讨论的朋友能把具体的业务场景细说一下,再结合具体业务场景给

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

一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就更别说会知道js还有面向对象,设计模式,MVC,MVVM,模块化,构建工具等等这些高大上的概念了.现在想想还真是Too young too naive.前两天某大神在群里分享他招聘前端的心得的时候就说,就是那些以为能写两个页面就可以自称前端的人拉低了行业水平.这样看来前两年我还真的扯了不少后腿呢……

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

之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7628(大神的文章写的很详细,建议先看完大神的文章) 一.js模块化 什么是js模块化,我们从历史说起. 1.一开始我们怎么写脚本?就是在html文件中用<script></script>写代码 这种方式的缺点:代码复用靠复制,基本是全局变量. 2.后来我们用js文件写代码,用<

webpack打包js,css和图片

1.webpack打包默认配置文件webpack.config.js 2.打包js文件:有这个文件并配置可以直接在cmd上webpack打包,没有这个文件要在cmd上输入 webpack main.js build.js 3.打包css文件:要在cmd上输入npm install style-loader css-loader 安装 module.exports={ //配置js entry:'./main.js',//webpack要打包的源文件 output:{ filename:'buil

webpack处理非模块化的几方法

webpack处理非模块化文件有几方法,主要分为外链和webpack打包二种情况: 一.使用CDN外部链接的方法 官网文档External: https://webpack.github.io/docs/library-and-externals.html 如下示例是把微信的JSSDK和zepto使用外链的方法在页面上使用script引用,并导出别名 1 module.exports = { 2 entry: { 3 app: './src/main.js', 4 vendors: ['vue'

js模块化编程之彻底弄懂CommonJS和AMD/CMD!

先回答我:为什么模块很重要? 答:因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套! 于是下面三个模块规范出来了,这篇文章也出来了(拼出来的 {捂脸笑}). JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧,这些规范

[转]js模块化编程之彻底弄懂CommonJS和AMD/CMD!

原文: https://www.cnblogs.com/chenguangliang/p/5856701.html ------------------------------------------------------------------------------------------------------ 先回答我:为什么模块很重要? 答:因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块.但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你

再唠叨JS模块化加载之CommonJS、AMD、CMD、ES6

Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. Javascript社区做了很多努力,在现有的运行环境中,实现"模块"的效果. CommonJS CommonJS定义的模块分为:  模块引用(require)    模块输出(exports)       模块标识(module) CommonJS Modules有1.0.1.1.1.1.1三个版本: Node.js.SproutCore实现了 Mo