资讯专栏INFORMATION COLUMN

React项目实战:环境搭建

cnio / 3075人阅读

摘要:官方文档中文翻译构建用户界面的库。官方文档建议学习时以官方文档为准,中文翻译或者第三方作者的教程可以帮助你理清思路会用到的重要知识点我也会进行简明的解释,如遇到错误或者不理解的内容,欢迎实时指出。

前言

前面提到前端大统一的概念,如果感兴趣,欢迎说说自己的看法,点击前往。Web前端框架层出不穷,不可能面面俱到,这里给个小建议:

如果对Weex App感兴趣,应该选择vue框架;

如果对React Native App感兴趣,应该选择React.js框架;

本系列文章是React技术栈,Vue技术栈将会在本系列文章结束后陆续更新。

技术栈

由于本系列的文章是项目实战,需要有相关的技术基础,可以到下方给出的链接进行深入学习。项目实战用到的主要框架和插件有:

webpack:预编译模块打包工具。 官方文档 - 中文翻译

React:构建用户界面的JavaScript库。 官方文档 - 中文翻译

Redux:管理整个应用的数据流。 官方文档 - 中文翻译

react-router:React应用路由库。 官方文档

styled-components:React中的CSS最佳实践。 官方文档

isomorphic-fetch:fetch兼容库。 官方文档

JRoll2:移动前端滑动插件。 官方文档

ECharts:基于html5 Canvas图表库。 官方文档

建议学习时以官方文档为准,中文翻译或者第三方作者的教程可以帮助你理清思路;会用到的重要知识点我也会进行简明的解释,如遇到错误或者不理解的内容,欢迎实时指出。

环境搭建

环境搭建是最为枯燥和最容易出错的地方,不过作为开发者,我们还是很有必要了解配置的具体步骤,在后面一段时间会发布一个简易版环境搭建教程。

系统环境:Win10 + 关闭安全管家

Node.js安装

到官方网站下载安装包 点击前往,选择LTS版本(9.0以后的版本在安装styled-components时会报错)。

npm部署

npm更新并部署至全局

npm install npm  -g

#【可选】设置淘宝镜像
npm config set registry https://registry.npm.taobao.org

npm常用命令:

npm init    #引导创建package.json文件
npm install ***    #本地安装;会在当前目录生成node_modules文件夹,并在此安装node模块
npm install *** -g    #全局安装;会在C:Users***AppDataRoaming
pm
ode_modules安装
npm install *** --save    #运行时依赖的模块;自动把模块和版本号添加到package.json文件dependencies部分
npm install *** --save-dev    #开发时依赖的模块;自动把模块和版本号添加到package.json文件devdependencies部分
npm update ***    #更新node模块
npm uninstall ***    #卸载node模块
创建package.json文件

项目根目录:D:web eact-webapp-demo,请根据自己实际情况设置。

cd D:web
eact-webapp-demo    #在PowerSell中打开项目目录
npm init -y    #跳过提问阶段,直接生成一个新的 package.json 文件。
安装模块
npm install --save react react-dom redux react-redux redux-logger redux-thunk react-router react-router-redux@next history styled-components isomorphic-fetch jroll jroll-pulldown jroll-infinite echarts babel-polyfill
npm install --save-dev webpack webpack-dev-server webpack-merge clean-webpack-plugin babel-loader babel-core babel-preset-env babel-preset-react css-loader style-loader file-loader url-loader html-webpack-plugin uglifyjs-webpack-plugin

模块简要说明:

react react-dom:React依赖
redux react-redux redux-logger redux-thunk:Redux依赖
react-router react-router-redux history:react-router依赖
styled-components:React中的CSS的实现依赖
isomorphic-fetch:fetch兼容库
jroll jroll-pulldown jroll-infinite:JRoll插件依赖
echarts:基于html5 Canvas图表库
babel-polyfill:用于实现浏览器不支持原生功能的代码
webpack:预编译模块打包
webpack-dev-server:实时重新加载的Web服务器
webpack-merge:webpack配置分离插件
clean-webpack-plugin:在building之前删除你以前build过的文件
babel-loader babel-core babel-preset-env babel-preset-react:转码器babel依赖
css-loader style-loader file-loader url-loader:各格式文件打包依赖
html-webpack-plugin:生成HTML5文件的插件
uglifyjs-webpack-plugin:代码压缩插件

配置模块

在项目根目录生成.babelrc文件(Windows系统下文件重命名为.babelrc.),并写入如下数据

{
    "presets": ["env","react"]
}

配置package.json:运行npm run build启动编译模式和npm run start热更新模式;

"scripts": {
    "start": "webpack-dev-server --config webpack.dev.js",
    "build": "webpack --config webpack.prod.js"
},

根目录新建webpack配置文件:webpack.common.jswebpack.dev.jswebpack.prod.js;

webpack.common.js(共用配置)

const path = require("path");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const webpack = require("webpack");

module.exports = {
    entry: ["babel-polyfill","./src/index.js"],    //项目的起点入口
    output: {    //项目输出配置
        path: path.resolve(__dirname, "build"),    //文件的输出目录 
        filename: "static/js/[name].[hash:5].js"
    },
    module: {    //模块加载
        rules: [
            {
                test: /.css$/,    //匹配规则
                use: [
                    { loader: "style-loader" },
                    { loader: "css-loader" }
                ]
            },{
                test: /.(js|jsx)$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader"
                }
            },{
                test: /.(png|svg|jpg|gif)$/,
                use: {
                    loader: "url-loader",
                    options: {
                        limit: 8192,    //小于8192B的文件转为base64文件
                        name: "static/images/[name].[hash:5].[ext]"
                    }
                }
            }
        ]
    },
    plugins: [    //插件配置
        new CleanWebpackPlugin(["build"]),    //清空编译输出文件夹
        new HtmlWebpackPlugin({
            title: "Cinglong"s Demo",
            filename: "index.html",
            template: path.resolve(__dirname, "templates", "index.html")
        }),    //生成Html5文件
        new webpack.optimize.CommonsChunkPlugin({
            name: "commons"
        }),    //共用代码打包
    ]
};

webpack.dev.js(开发配置)

const merge = require("webpack-merge");
const common = require("./webpack.common.js");
const webpack = require("webpack");

module.exports = merge(common, {
    devtool: "inline-source-map",    //代码关联显示方式
    devServer: {
        historyApiFallback:true,    //文件重定向,和react-router相关
        hot: true,    //开启模块热替换
        port: 80,    //服务器端口
        host: "192.168.23.101",    //服务器域名
        open: true    //自动打开浏览器标签
    },
    plugins: [
        new webpack.NamedModulesPlugin(),    //显示模块的相对路径
        new webpack.HotModuleReplacementPlugin()    //加载热替换插件
    ]
});

webpack.prod.js(预编译配置)

const merge = require("webpack-merge");
const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
const common = require("./webpack.common.js");

module.exports = merge(common, {
    plugins: [
        new UglifyJSPlugin()    //代码压缩
    ]
});
项目目录
 react-webapp-demo
  |- /node_modules    //模块安装目录
  |- /src    //代码目录
    |- /container    //容器组件
    |- /presentational    //展示组件
      |- /images    //图片目录
    |- /reducers    //reducers操作
    |- /utils    //其他
    |- index.js    //项目入口
  |- /templates    //模板目录
  |- .babelrc    //babel编译配置
  |- package.json    //项目目录配置
  |- package-lock.json    //模块信息(自动生成)
  |- webpack.common.js    //webpack共用配置
  |- webpack.dev.js    //webpack开发配置
  |- webpack.prod.js    //webpack编译配置
系列目录

前端大统一时代即将来临?

React项目实战:环境搭建

React项目实战:react-redux-router基本原理

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90008.html

相关文章

  • React项目实战环境搭建

    摘要:官方文档中文翻译构建用户界面的库。官方文档建议学习时以官方文档为准,中文翻译或者第三方作者的教程可以帮助你理清思路会用到的重要知识点我也会进行简明的解释,如遇到错误或者不理解的内容,欢迎实时指出。 前言 前面提到前端大统一的概念,如果感兴趣,欢迎说说自己的看法,点击前往。Web前端框架层出不穷,不可能面面俱到,这里给个小建议: 如果对Weex App感兴趣,应该选择vue框架; 如果...

    GHOST_349178 评论0 收藏0
  • DevOps 基于Walle的小型持续集成实战(二)设计

    摘要:以便对整个持续集成印象加深。配置完各环境发布脚本后,则可以使用构建发起进行触发环境准备。并会在远程环境上存放多次发布的版本,用于回退和切换服务停用。进行等操作,停止原本运行的服务切换启用。 该文章用于建立一个小型的基于Walle的持续集成工具。解决java,react,angular项目的编译发布。以便对整个持续集成印象加深。官方网站:https://walle-web.io/ 适用...

    zr_hebo 评论0 收藏0
  • React+dva+webpack+antd-mobile 实战分享(一)

    摘要:再看本篇文章之前,本人还是建议想入坑的童鞋可以选有来创建的项目,因为现在和还不成熟,坑相对要多一些,当然如果你已经做好跳坑的准备,那么请继续往下走本文适合对有一定了解的人。 再看本篇文章之前,本人还是建议想入坑react的童鞋可以选有create-react-app来创建react的项目,因为现在dva和roadhog还不成熟,坑相对要多一些,当然如果你已经做好跳坑的准备,那么请继续往...

    ziwenxie 评论0 收藏0
  • 在Windows下搭建React Native Android开发环境,android开发mvp模式

    摘要:在这个过程中可能会出现一些问题,导致失败你没有配置需要再系统变量中加入这个,指到目录。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。本文已被开源项目学习笔记总结移动架构视频大厂面试真题项目实战源码收录 在这个过程中可能会出现一些问题,导致build失败: 1. 你没有配置ANDROID_HOME,...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

cnio

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<