zoukankan      html  css  js  c++  java
  • webpack学习(五)—webpack+react+es6(第1篇)

    如果你看过webpack学习系列的前一个文章,接下来做的东西会比较简单 :webpack学习(四)— webpack-dev-server

    react发展的很快,现在大部分开发react相关的项目,都会用到这个组合:webpack+react+es6

    还是以一个项目举例,项目中的package.json是生成的,"devDependencies"都是自己手动安装加入,如果拷贝网上的资料,已存在package.json文件且内容完整,可以npm install直接安装所需要的插件。

    第一次接触,为了一探react的具体开发流程,还是自己一个个安装比较好。

    如果你在看本文,请按照以下步骤操作即可:

    项目目录:

    package.json

    {
      "name": "pro4",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "build": "webpack",
        "dev": "webpack-dev-server --inline --hot --config webpack.config.js"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "babel-core": "^6.18.2",
        "babel-loader": "^6.2.7",
        "babel-preset-es2015": "^6.18.0",
        "babel-preset-react": "^6.16.0",
        "css-loader": "^0.26.0",
        "react": "^15.4.0",
        "react-dom": "^15.4.0",
        "react-hot-loader": "^3.0.0-beta.6",
        "style-loader": "^0.13.1",
        "webpack": "^1.13.3",
        "webpack-dev-server": "^1.16.2"
      }
    }
    
    

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    </head>
    <body>
    	<div id="content"></div>
    	<script src="build/bundle.js"></script>
    </body>
    </html>
    

      

    webpack.config.js

    var path = require("path");
    module.exports = {
      entry:[
        './src/js/app.js'
      ],
      output: {
        path: path.resolve('./', "dist"),
        publicPath: "build",
        filename: "bundle.js"
      },
      module: {
          loaders: [
              {test: /.js?$/, exclude: /node_modules/,  loaders: [ 'babel?presets[]=react,presets[]=es2015' ] },
              { test: /.css$/, loader: 'style!css'}
          ]
        },
      resolve:{
            extensions:['','.js','.json']
        },
    };
    

      

    src/js/app.js

    import React from 'react';
    import ReactDOM from 'react-dom';
    import Helloworld from './helloworld';
    
    
    // ReactDOM.render
    // (<Helloword/>,document.getElementById('content');
    // );
    ReactDOM.render
    (
    	<Helloworld/>,
    	document.getElementById('content')
    );
    

      

    src/js/helloword.js

    import React from 'react';
    import ReactDOM from 'react-dom';
    
    class Helloworld extends React.Component{
    
    	constructor(props) {
    		super(props);
    	}
    
    	render(){
    		return(<h1>Hello World!!!!!!</h1>)
    	}
    }
    
    module.exports = Helloworld
    

    至此,项目结构,文件都已完成

    安装: npm init

    启动:npm run dev

    项目地址:http://localhost:8080/index.html

      说明:

      1)本文例子中package.json包含的 "devDependencies"项,是webpack+react+es6开发的最少的安装。本例热加载,修改任何一个src/js下的js文件,保存,浏览器自动更新。

      2)本文例子并没有安装react-hot-loader,原因是直接安装,目前版本一到3.0以上,并不支持在webpack.config.js中这么书写:

     {test: /.js?$/, exclude: /node_modules/, loaders: ['react-hot','babel-loader?presets[]=react,presets[]=es2015'] },
    

      如果写了,webpack-dev-server会报错:

      

    Module build failed: Error: React Hot Loader: The Webpack loader is now exported separately
    

      

      但是,用低版本的react-hot-loader不会报错。

      而且你会发现,现在不用react-hot-loader,也可以热加载。

      3)js的加载器:

    {test: /.js?$/, exclude: /node_modules/,  loaders: [ 'babel?presets[]=react,presets[]=es2015' ] },
    

      这里很重要,先用babel-loader将es6(es2015),react的语法(jsx)转换为目前浏览器普遍支持的语法,即es5。

      如果这里配置出错,或者没有安装除了babel外的2个loader,会报错

    Module build failed: SyntaxError: Unexpected token

      因为你在return里写的HTML标签不识别(不是字符串)。 

      4)如果要兼容老版本浏览器,支持es3语法。还需要用es3ify-loader。本例没有用。

      5)如果你想输出文件,执行webpack -p即可生成dist目录下的bundle.js文件。再建个html文件,引入bundle.js。即可看到helloworld!!!!。这就是我们发布的js,html。

      6)本例没有对html文件进行处理。上一步会显得别扭。这个后续慢慢探索吧。。。

      7)ES6的最直接体现是我们创建组件的时候,用class而不是React.creatClass这个方法了。此外,import也是ES6新加入的,用于引入模块。 

  • 相关阅读:
    VS中,如何将存在于解决方案里,但是没有显示出来的文件(或文件夹)显示到项目中。
    (转)分布式系统编程,你到哪一级了?
    领域驱动架构学习总结
    Java多线程总结
    MySQL更新优化
    MySQL查询优化
    MySQL索引
    MySQL优化
    MySQL联接操作
    MySQL架构
  • 原文地址:https://www.cnblogs.com/xiaochongchong/p/6077504.html
Copyright © 2011-2022 走看看