美文网首页webpack首页投稿(暂停使用,暂停投稿)
react基于webpack和Babel 6上的开发环境搭建

react基于webpack和Babel 6上的开发环境搭建

作者: 三月懒驴 | 来源:发表于2016-03-19 12:44 被阅读5982次

    react-js开发环境

    时间:2016.3.19-12:29
    作者:三月懒驴
    基于:react版本:0.14
    基于:babel版本:6

    1. 开始一个项目
    npm init
    
    1. 安装webpack
    npm install webpack --save-dev
    
    1. 项目目录(demo架构)
      • /app
        • main.js
        • component.js
      • /build
        • bundle.js (自动生成)
        • index.html
      • webpack.config.js
      • package.json
    2. 设置webpack.config.js
    var path = require('path');
    module.exports = {
        entry:path.resolve(__dirname,'app/main.js'),
        output:{
            path:path.resolve(__dirname,'build'),
            filename:'bundle.js'
        }
    };
    
    1. 在package.json里面预设这个命令去启动打包功能
    "build":"webpack"
    
    1. ----课间练习---
    //component.js
    'use strict'
    module.exports = function(){
        var a = 'hello word'
        return a;
    }
    
    //main.js
    'use strict'
    var component = require('./component.js');
    document.body.innerHTML = component();
    
    1. 使用webpack-dev-server:监听代码自动刷新!
    npm install webpack-dev-server --save-dev
    
    1. 在package.json里面配置webpack-dev-server
    "dev":"webpack-dev-server --devtool eval --progress --colors --hot --content-base build"
    //webpack-dev-server 创建一个服务器8080端口的
    //devtool eval --为你的代码创建源地址,可以代码快速定位
    //progress --显示进度条
    //colors --命令行带颜色
    //content-base build --指向设置的输出目录
    //一旦启动这个就会用服务器去监听代码文件的变化,从而每次变化都自动合并
    
    1. 启动自动刷新功能
    //配置在webpack.config.js的入口
    entry:[
        'webpack/hot/dev-server',
        'webpack-dev-server/client?http://localhost:8080',
        path.resolve(__dirname,'app/main.js'),
    ]
    
    1. ----课堂练习---

      1. npm run dev 启动服务器
      2. 打开浏览器->http://localhost:8080
      3. 修改一下6的时候写的代码中的compnent.js的return的东西
    2. 重点:配置react / babel

    //安装react
    npm install react --save
    npm install react-dom --save
    //安装babel-loader
    npm install babel-loader --save-dev
    npm install babel-core --save-dev
    npm install babel-preset-es2015 --save-dev  //支持ES2015
    npm install babel-preset-react --save-dev //支持jsx
    npm install babel-preset-stage-0 --save-dev //支持ES7
    //但是还不够
    npm install babel-polyfill --save
    /*
    Polyfilla是一个英国产品,在美国称之为Spackling Paste(译者注:刮墙的,在中国称为腻子).记住这一点就行:把旧的浏览器想象成为一面有了裂缝的墙.这些[polyfills]会帮助我们把这面墙的裂缝抹平,还我们一个更好的光滑的墙壁(浏览器)
    */
    npm install babel-runtime  --save
    npm install babel-plugin-transform-runtime --save-dev
    /*减少打包的时候重复代码,以上要注意是放在dev还是非dev上!*/
    

    配置babel

    //在入口添加polyfill
    entry[
        'babel-polyfill',
        'webpack/hot/dev-server',
        'webpack-dev-server/client?http://localhost:8080',
        path.resolve(__dirname,'app/main.js')
    ]
    //在webpack.config.js的module.exports = {}里面增加
    module:{
        loaders:[{
            'loader':'babel-loader',
            exclude:[
                //在node_modules的文件不被babel理会
                path.resolve(__dirname,'node_modules'),
            ],
            include:[
                //指定app这个文件里面的采用babel
                path.resolve(__dirname,'app'),
            ],
            test:/\.jsx?$/,
            query:{
                plugins:['transform-runtime'],
                presets:['es2015','stage-0','react']
            }
        }]
    }
    
    1. --课堂测试--
    //component.js
    'use strict'
    import React from 'react'
    class Component extends React.Component{
        render(){
            return <div>Helllo World</div>
        }
    }
    module.exports = Component
    
    //main.js
    'use strict'
    import React from 'react'
    import {render} from 'react-dom'
    import Component from './component'
    let main = function(){
        render(<Component />,document.getElementById('main'));
    }
    main();
    
    1. 加入CSS / iamge / font
    // 这里先留个坑!因为暂时来说还是认为外链出来适合现在这个时代。可能在项目正式上线的时候才需要
    
    1. 发布配置:单文件入口版本!
    //新建一个webpack.production.config.js
    //in package.json
    "deploy": "NODE_ENV=production webpack -p --config webpack.production.config.js"
    //in webpack.production.config.js
    //和开发环境不同的是,入口和出口。相应的在HTML的JS源也要进行修改。
    var path = require('path')
    var node_module_dir = path.resolve(__dirname,'node_module');
    module.exports = {
        entry:[
            'babel-polyfill',
            path.resolve(__dirname,'app/main.js'),
        ],
        output:{
            path:path.resolve(__dirname,'build'),
            filename:'app.js'
        },
        module:{
            loaders:[
                {
                    loader:"babel-loader",   //加载babel模块
                    include:[
                        path.resolve(__dirname,'app'),
                    ],
                    exclude:[
                        node_module_dir
                    ],
                    test:/\.jsx?$/,
                    query:{
                        plugins:['transform-runtime'],
                        presets:['es2015','stage-0','react']
                    }
                },
            ]
        }
    }
    
    1. 发布配置(多文件模式)
      库最好就不要打包进来。因为一般库都是不会改动的。所有用户load一次就好了。所以这里就要进行库的分离。
      依旧是:webpack.production.config.js
    var path = require('path');
    var webpack = require('webpack');
    var node_module_dir = path.resolve(__dirname,'node_module');
    module.exports = {
        entry:{
            app:[path.resolve(__dirname,'app/main.js'),],
            react: ['babel-polyfill','react','react-dom']
        },
        output:{
            path:path.resolve(__dirname,'build'),
            filename:'app.js'
        },
        module:{
            loaders:[
                {
                    loader:"babel-loader",   //加载babel模块
                    include:[
                        path.resolve(__dirname,'app'),
                    ],
                    exclude:[
                        node_module_dir
                    ],
                    test:/\.jsx?$/,
                    query:{
                        plugins:['transform-runtime'],
                        presets:['es2015','stage-0','react']
                    }
                },
            ]
        },
        plugins: [
            new webpack.optimize.CommonsChunkPlugin('react', 'react.js')
        ]
    }
    

    预计学习搭建时间:1小时!
    恭喜你!全部课程完成,接下来的话,我们就要开始react的课程了!本课程如果还有什么不懂的话,可以在评论中进行讨论。

    相关文章

      网友评论

      • Sense王旭明:运行 npm run dev 出错,package.json 中 dev 写的是 "dev": "webpack-dev-server --devtool eval --progress --colors --hot --port 80 --inline --content-base ."
      • 5cace87bd915:运行 npm run dev 会报错,怎么解决?
        [0] multi main 52 bytes {0} [built]
        [1] (webpack)/hot/dev-server.js 1.79 kB {0} [built]
        [2] (webpack)/hot/log-apply-result.js 788 bytes {0} [built]
        [3] (webpack)-dev-server/client?http://localhost:8080 3.97 kB {0} [built]
        5cace87bd915:@三月懒驴 谢谢~~~~
        三月懒驴:@5cace87bd915 可以从我这个GitHub clone 一份下来看看哪里出错了
        https://github.com/sanyuelanv/project
      • _yuchen震:请问为什么npm run dev 报错会说 missing script:dev :disappointed_relieved:
        _yuchen震:谢谢回复,
        是在package.json 里面的json里加入
        {
        …………
        …………
        "dev":"webpack-dev-server --devtool eval --progress --colors --hot --content-base build"
        }
        这样一串还是不行,是不是 --devtool eval --progress --colors --hot --content-base build都要通过npm install 的?? :joy:
        三月懒驴:@_yuchen震 看第八点,在package.json里面配置webpack-dev-server
        三月懒驴:@_yuchen震 json那里设置了吗?
      • 藍色的一支笔:8 里面的webpack-dev-sever写错了,应该是webpack-dev-server
        三月懒驴:@藍色 多谢指出~编辑时候打漏了
      • a6ab4b3b6b4a:好文。
      • 水底鱼:谢谢 正在学习。
        三月懒驴:@水底鱼 你想要纯web页面的React-js还是react-native做的页面?如果React-js的话,个人感觉爱移动端使用还是有些困扰的,主要是安卓机子上。设计不好的话,大量的DOM重绘(虽然有虚拟DOM!!)在性能一般的安卓机子造就很差的体验。我个人是偏向使用自己手写原生JS去构造,如果大型点的话,vue.js会是一个不错的选择。
        水底鱼: @三月懒驴 请教一下,app内嵌的web页面,用react来构建 ,可行么?我是做app开发的,负责native部分,页面由前端的人负责,但是他们都是用最传统的技术,对新技术也没什么兴趣,每次版本开发出来一大推bug,我本身对web开发不熟,看react的时候牵扯出一大推新技术,什么babel webpack之类的,如果用react构建内嵌的问好,工程化这块有什么好的建议么?谢谢了
        三月懒驴:@水底鱼 大家互相交流一下,记得一年前八月份刚接触React的时候,我还是个经常到处问人的,现在也算能帮人解决问题了

      本文标题:react基于webpack和Babel 6上的开发环境搭建

      本文链接:https://www.haomeiwen.com/subject/lqyhlttx.html