create-react-app全家桶router mobx全局安装配置

目录
  • 正文
  • ceacte-react-app 初始化项目
    • 全局安装 create-react-app
    • 新建一个项目
    • 进入项目并启动
    • sass 的配置
    • 安装 loader 依赖
    • 修改 webpack配置文件
    • 引入UI库
    • 安装组件
    • 按需加载
    • 修改 webpack 文件
    • 引入样式
    • 在页面中使用组件
    • 配置 eslint
    • 安装需要的包
    • 引入配置
    • commit 代码时使用 eslint 检查
    • 引入路由系统
    • 设置文件别名
    • 安装路由组件 react-router
    • 添加数据管理
    • 安装依赖
    • 修改文件
    • 开始使用
    • 添加 mobx 开发工具
  • 总结

正文

create-react-app 是一个搭建 react 项目的脚手架,该脚手架很好用,文档功能也很全,是上手 react 项目的不二首选,下面我们就来讲讲 reacte-react-app 创建的项目如何配置UI组件以及数据流

ceacte-react-app 初始化项目

全局安装 create-react-app

npm install -g create-react-app

or

yarn -g create-react-app

新建一个项目

create-react-app react-demo

工具会帮你初始化一个简单基本的项目并且会自动帮你安装项目所需要的各种依赖,如果中途出现网络问题导致依赖安装不上,这时你可能需要配置代理或者设置其他的 npm 源。关于 npm 源镜像有很多选择,比如淘宝镜像等,这里不多做说明,网上有很多。

进入项目并启动

cd react-demo
npm start

or

yarn start

此时浏览器会自动访问 http://localhost:3000/,你会看到一个 react 的欢迎界面,如下:代表你的项目已经正常运行了

但是:这仍然不够,这时你用代码编辑器打开项目会发现项目结构其实是这样的:

react-demo/
  README.md
  node_modules/
  package.json
  public/
    index.html
    favicon.ico
  src/
    App.css
    App.js
    App.test.js
    index.css
    index.js
    logo.svg

找不到 webpack 的配置项,此时你需要展开 (eject) 项目,这个一个不可逆过程,一旦你执行了,就不能回到初始化

npm run eject

再看项目结构,就会多了一些其他目录,如下:

react-demo/
  README.md
  config/
    jest/
    env.js
    paths.js
    polyfills.js
    webpack.config.dev.js
    webpack.config.prod.js
    webpackDevServer.config.js
  node_modules/
  package.json
  public/
    index.html
    favicon.ico
  scripts/
    build.js
    start.js
    test.js
  src/
    App.css
    App.js
    App.test.js
    index.css
    index.js
    logo.svg
    registerServiceWorker.js

展开 config 目录,里面就有 webpack 配置文件,还有一些环境、兼容、测试等的配置。而 scripts 目录里主要就是测试、启动、打包的脚本,这里不做过多描述,(其实笔者也没认真看过里面的代码),如果要详细研究,create-react-app 的官方文档有详细的讲解。

好了,现在 react 项目已经跑起来了,也找到 webpack 配置,可以做一些自定义的配置,接下来我们就讲一将,如何配置数据流以及UI库。

sass 的配置

安装 loader 依赖

npm install resolve-url-loader sass-loader node-sass --save

修改 webpack配置文件

找到 webpack.config.dev.js 与 webpack.config.prod.js 文件,后缀 dev 表示开发的配置,prod 表示是生产环境的配置,因此两个配置文件都需要修改。

  • 修改webpack.config.dev.js在 module 的 rules 字段中添加以下代码
{
  test: /\.scss$/,
  use: [
    require.resolve('style-loader'),
    {
      loader: require.resolve('css-loader'), // translates CSS into CommonJS
      options: {
        sourceMap: true,
        importLoaders: 3,
      },
   },
   require.resolve('resolve-url-loader'), // resolves relative paths in url() statements based on the original source file
   {
      loader: require.resolve('postcss-loader'),
      options: {
        ident: 'postcss', // https://webpack.js.org/guides/migrating/#complex-options
        plugins: () => [
          require('postcss-flexbugs-fixes'),
          autoprefixer({
            flexbox: 'no-2009',
          }),
        ],
     },
   },
   {
      loader: require.resolve('sass-loader'),  // compiles Sass to CSS,
      options: {
        includePaths: [`${paths.appNodeModules}/normalize-scss/sass`],
      },
    },
  ],
},

这时修改 .css 样式文件为 .scss 并用 sass 语法修改样式,会发现页面生效了,别忘了修改在组件中引用样式的后缀。

当然,这只是修改了开发环境的配置,还需要修改生产环境

  • 修改webpack.config.prod.js同样在 rules 字段中添加以下代码
{
  test : /\.scss$/,
  use  : ExtractTextPlugin.extract(
    Object.assign(
      {
        fallback: require.resolve('style-loader'),
        use: [
          {
            loader: require.resolve('css-loader'), // translates CSS into CommonJS
            options: {
              sourceMap     : true,
              minimize      : true,
              importLoaders : 3,
            },
          },
          require.resolve('resolve-url-loader'), // resolves relative paths in url() statements based on the original source file
          {
            loader: require.resolve('postcss-loader'),
            options: {
              ident: 'postcss', // https://webpack.js.org/guides/migrating/#complex-options
              plugins: () => [
                require('postcss-flexbugs-fixes'),
                autoprefixer({
                  flexbox: 'no-2009',
                }),
              ],
            },
          },
          {
            loader: require.resolve('sass-loader'),  // compiles Sass to CSS,
            options: {
              includePaths: [`${paths.appNodeModules}/normalize-scss/sass`],
            },
          },
        ]
      },
      extractTextPluginOptions
    )
  ),
},

引入UI库

笔者使用的是蚂蚁金服的 antd UI组件库,文档全,使用简单,组件也能满足基本的需求。官方文档也有具体的相关配置说明。

安装组件

npm install antd --save

or

yarn add antd

按需加载

使用 babel-plugin-import

npm install babel-plugin-import --save

修改 webpack 文件

在 rules 中的 babel 规则中的 options 中添加以下代码

plugins: [
   ['import', { libraryName: 'antd', style: true }],
],

引入样式

使用 less 加载

npm install less@2.7.2 less-loader --save

注意: less 版本不能高于 3.0.0 至于为什么官方issue

修改 webpack 文件

{
  test: /\.less$/,
  use: [
    require.resolve('style-loader'),
    require.resolve('css-loader'),
    {
      loader: require.resolve('less-loader'),
      options: {
        modifyVars: { '@primary-color': '#1890ff' },
      },
    },
  ],
},

其中 @primary-color 表示主题色,官方也有推荐配置主题色的说明。

在页面中使用组件

import { Button } from 'antd';
...
<div>
  <Button type="primary">button</Button>
</div>
...

此时页面上就会显示 Button 组件

配置 eslint

为了是代码保持统一风格,可以使用工具 eslit 来检查代码的规范性。笔者是使用 airbnb 的代码风格,当然你也可以自定义属于自己的code-style。

安装需要的包

npm install eslint-config-airbnb --save

注意:
也许使用 create-react-app 初始化出来的项目,配置 eslint 以及安装了各种 eslint 依赖,这时启动项目发现报以下错误,那么你可能需要更改包的版本,笔者也是尝试了多次才成功的。

eslint.png

引入配置

在项目的根目录下创建 .eslintrc 文件

{
  "env": {
    "browser": true,
    "jest": true,
    "es6": true,
    "node": true
  },
  "parser": "babel-eslint",
  "plugins": [
    "react",
    "import"
  ],
  "extends": "airbnb",
  "rules": {}
}

其中 rules 可以覆盖 airbnb 的规则,关于如何编写 eslint 规则可以查询 eslint 官方文档

也可以在根目录下创建 .eslintignore 来对某些文件不做 eslint 校验

commit 代码时使用 eslint 检查

安装依赖

npm install lint-staged husky --save

修改 package.json 文件

"scripts": {
  "precommit": "lint-staged",
  "start": "react-scripts start",
  "build": "react-scripts build",
...
"lint-staged": {
  "src/**/*.{js,jsx}": [
    "eslint --fix",
    "git add"
  ]
}

引入路由系统

设置文件别名

现在,我们需要更改 src 目录的文件结构,以便于更符合实际项目场景,我们可能需要 components 文件夹来存放组件,routes 文件夹来存放页面,styles 文件夹来存放样式,utils 文件夹来存放工具类函数等。

既然有了文件夹来区分不同的功能,为了方便文件的相互,我们可以利用 webpack 来设置别名。

  • 修改 config 文件夹下的 paths 文件
module.exports = {
  ...
  appSrc: resolveApp('src'),
  appStyles: resolveApp('src/styles'),
  appRoutes: resolveApp('src/routes'),
  appComponents: resolveApp('src/components'),
  appUtils: resolveApp('src/utils'),
  ...
  • 修改 webpack 配置项 alias
alias: {
  styles: paths.appStyles,
  routes: paths.appRoutes,
  components: paths.appComponents,
  utils: paths.appUtils,
  ...

安装路由组件 react-router

npm install react-router react-router-dom --save
  • 在 routes 文件夹中新建 index.jsx 页面,以及新建两个页面组件分别是 home.jsx 和 about.jsxindex.jsx
import React from 'react'
import { Route, Redirect } from 'react-router'
import { HashRouter, Switch } from 'react-router-dom'
import Home from 'routes/home'
import About from 'routes/about'
const Routes = () => (
  <HashRouter>
    <div>
      <Route exact path="/" render={() => <Redirect to="/home" />} />
      <Switch>
        <Route path="/home" component={Home} />
        <Route path="/about" component={About} />
      </Switch>
    </div>
  </HashRouter>
)
const App = () => (
  <Routes />
)
export default App

about.jsx

import React from 'react'
import { Link } from 'react-router-dom'
const About = () => (
  <div>
    <p>this is about page</p>
    <Link to="/home">goto Home</Link>
  </div>
)
export default About

home.jsx

import React from 'react'
import { Link } from 'react-router-dom'
const Home = () => (
  <div>
    <p>this is home page</p>
    <Link to="/about">goto About</Link>
  </div>
)
export default Home
  • 修改 src 文件夹下的 index
import React from 'react'
import ReactDOM from 'react-dom'
import App from 'routes/index'
import registerServiceWorker from './registerServiceWorker'
ReactDOM.render(<App />, document.getElementById('root'))

添加数据管理

react 本身就有自己的状态管理 state,但随着项目的复杂性页面的增多其维护性不是那么友好,于是出现了针对 react 的数据状态管理,如 flux、redux、mobx 等等。下面我们就讲解项目如何配置 mobx。

安装依赖

npm install mobx mobx-react --save

修改文件

  • 新建文件夹 stores在 src 目录下新建一个文件夹 stores,创建 index.js 文件
const store = {}
export default store
  • 修改 webpack 文件

在 webpack 文件中设置别名,方面引用,当然别忘了修改 paths 文件来设置路径

alias: {
  styles: paths.appStyles,
  routes: paths.appRoutes,
  components: paths.appComponents,
  stores: appStores,
...
  • 修改入口文件

修改 routes 下的 index.js

...
import { Provider } from 'mobx-react'
import stores from 'stores'
...
const App = () => (
  <Provider {...stores}>
    <Routes />
  </Provider>
)
...

开始使用

  • 使用 mobx 你还需要安装 babel 的装饰器插件,以及修改 babel 的配置
npm install babel-plugin-transform-decorators-legacy --save

修改 package.json 文件中的 babel 参数,或者在根目录下新建一个 .babelrc 文件

"babel": {
  "presets": [
    "react-app"
  ],
  "plugins": [
    "babel-plugin-transform-decorators-legacy"
  ]
...

现在,你可以在你的组件中使用 mobx 来管理你的状态了。

关于 mobx 的使用,你可以访问官方文档

添加 mobx 开发工具

  • 安装依赖
npm install mobx-react-devtools
  • 修改入口文件 routes 下的 index.js
...
import DevTools from 'mobx-react-devtools'
....
const App = () => (
  <Fragment>
    <Provider {...stores}>
      <Routes />
    </Provider>
    <DevTools />
  </Fragment>
)

当然,你也可以设置环境变量,只在开发中打开该工具

{
  process.env.NODE_ENV === 'development' ? (
    <DevTools />
  ) : null
}

总结

create-react-app 脚手架其实已经很完美了,一些列的打包编译优化也做了,使用 create-react-app 初始化的项目,只需要根据业务定制化的配置一些东西,这些都不难,网上有很多类似的案例,主要还是心细,多去专研。

最后,附上本次项目的完整代码

以上就是create-react-app全家桶router mobx全局安装配置的详细内容,更多关于create-react-app安装配置router mobx的资料请关注我们其它相关文章!

(0)

相关推荐

  • create-react-app中添加less支持的实现

    前言 使用 create-react-app 脚手架创建项目后,默认是不支持 less 的.所以我们需要手动添加. 第一步 暴露webpack配置文件 使用 create-react-app 创建的项目,默认情况下是看不到 webpack 相关的配置文件,我们需要给它暴露出来,使用下面命令即可: npm run eject 运行之后,我们发现多了一个config文件夹 这样就可以修改 webpack 相关配置了. 第二步 添加less 在项目根目录 使用 npm 或者 yarn 来安装 less

  • create-react-app开发常用配置教程

    目录 引言 设置代理 模块热替换(HMR) css局部化 支持装饰器写法 打包后路径问题导致页面空白 配置简化路径 按需引用antd-mobile(antd同) 打包构建分析 生产环境去掉map文件 配置less 配置不同环境变量 引言 注: 如未找到配置文件请使用npm run eject弹出配置文件 当前对应版本react 16.2 设置代理 在开发中往往是跨域请求的,配置一下请求代理可以解决这个问题 // package.json 文件 "proxy": "http:/

  • npx create-react-app xxx创建项目报错的解决办法

    手头有一台大学时代的Windows电脑,它此前没有装过create-react-app,只装了node环境.版本信息:node -> 10.16.3,npm -> 6.9.0.前几日闲的无事想给它装个React,结果失败了,报了错,所以有了下面这出. 安装过程 根据React官方文档(上图)可以发现,此时并不需要安装create-react-app工具,只要你的node >= 8.10 && npm >= 5.6,就可以直接使用npx create-react-ap

  • create-react-app常用自定义配置教程示例

    目录 引言 yarn安装依赖包报错 IE10下报错, Map 未定义 webpack添加 alias 解决跨域,反向代理配置 项目主要文件路径配置 关闭自动开启浏览器配置 修改 webpack output.publicPath 生产环境关闭 sourcemap eslint 配置 装饰器 Decorators 配置 区分环境 编译进度条配置 打包开启 gzip 压缩 生成 report.html 可视化打包分析 引入 antd 1.直接引入,样式直接用编译后的antd.css 2.引入 les

  • create-react-app项目配置全解析

    目录 引言 准备工作 启动命令 start.js build.js 目录结构 配置解析 weback.config.js 结语 引言 create-react-app(以下简称cra)作为react官方提供的脚手架工具,是目前生成react项目一个非常常用和主流的工具.很多企业级的应用搭建也是基于这个脚手架工具上二次开发.最近这段正好最近学习了webpack打包配置工程化的一些内容,索性就以cra的配置为例,对这段时间的学习做一个总结. 准备工作 首先,我们要用cra创建一个项目.这个没啥好说,

  • create-react-app使用antd按需加载的样式无效问题的解决

    官网给出的按需加载解决方案,先安装 babel-plugin-import 因为antd默认引入样式是less,所以需要手动配置为CSS,配置方法如下: 第一种方法:在package.json中配置,这种方法成功的前提是webpack里query下配置babelrc:true, 这样就会使用babelrc文件中的配置 "babel": { "presets": [ "react-app" ], "plugins": [ [ &

  • create-react-app全家桶router mobx全局安装配置

    目录 正文 ceacte-react-app 初始化项目 全局安装 create-react-app 新建一个项目 进入项目并启动 sass 的配置 安装 loader 依赖 修改 webpack配置文件 引入UI库 安装组件 按需加载 修改 webpack 文件 引入样式 在页面中使用组件 配置 eslint 安装需要的包 引入配置 commit 代码时使用 eslint 检查 引入路由系统 设置文件别名 安装路由组件 react-router 添加数据管理 安装依赖 修改文件 开始使用 添加

  • 在Create React App中启用Sass和Less的方法示例

    关于创建 create-react-app 项目请查看:create-react-app 的安装与创建 . 关于在 less 和 sass 如何在 create-react-app 启用 CSS Modules,请查看我的上一篇文章: 在 Create React App 中使用 CSS Modules . 启用 Sass 语法编写 CSS create-react-app 脚手架中已经添加了 sass-loader 的支持,所以只需要安装 node-sass 插件即可 安装 node-sass

  • 在Create React App中使用CSS Modules的方法示例

    前提条件 请先进行全局安装 create-react-app 插件哈,安装命令:npm install create-react-app -g 先使用 create-react-app 命令下载一个脚手架工程,安装命令: # 使用 npx $ npx create-react-app my-app # 使用 npm $ npm init npx create-react-app my-app # 使用 yarn $ yarn create react-app my-app 运行项目 $ cd m

  • 详解使用React全家桶搭建一个后台管理系统

    引子 学生时代为了掌握某个知识点会不断地做习题,做总结,步入岗位之后何尝不是一样呢?做业务就如同做习题,如果'课后'适当地进行总结,必然更快地提升自己的水平. 由于公司采用的react+node的技术栈,于是就完成了一个reactSPA小项目,计划日后把平时工作中遇到的业务以及学习中遇到有趣的东西给抽象成demo展示出来.目前该项目只是把雏形搭好,效果如下.在此文的基础上,写了篇新文章使用React全家桶搭建一个后台管理系统,欢迎围观.(附注:因为项目不时更新,文章不一定会即时更新,所以以实际的

  • React全家桶环境搭建过程详解

    本文介绍了React全家桶环境搭建过程详解,分享给大家,具体如下: 环境搭建 1.从零开始搭建webpack+react开发环境 2.引入Typescript 安装依赖 npm i -S @types/react @types/react-dom npm i -D typescript awesome-typescript-loader source-map-loader 新建tsconfig.json { "compilerOptions": { "outDir"

  • 全面介绍vue 全家桶和项目实例

    简介 "简单却不失优雅,小巧而不乏大匠". 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,"vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点".授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You). Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计.

  • Vue 3.0 全家桶抢先体验

    序 Vue 3.0 全家桶发布内容包括: vue: Beta vue-router: Alpha vuex: Alpha vue-class-component: Alpha vue-cli: Experimental support via vue-cli-plugin-vue-next eslint-plugin-vue: Alpha vue-test-utils: Alpha vue-devtools: WIP jsx: WIP 可以看到 Vue 3.0 beta 版本是一个项目系列,包含

  • vue项目搭建以及全家桶的使用详细教程(小结)

    前言 vue是现阶段很流行的前端框架,很多人通过vue官方文档的学习,对vue的使用都有了一定的了解,但再在项目工程化处理的时候,却发现不知道改怎么更好的管理自己的项目,如何去引入一些框架以及vue全家桶其他框架的使用,以下将详细地介绍本人在处理工程文件构建的过程:对于刚开始解除vue的新手,建议使用官方脚手架vue-cli,当然,如果你对于webpack很熟悉,你也可以自己动手搭建自己的脚手架,当然如果你没把握的话,还是推荐使用vue-cli,能更好的帮助你搭建项目: 步骤一.安装vue-cl

  • Vue 全家桶实现移动端酷狗音乐功能

    Vue 已经用了不少时间,最近抽空把以前的未完成的酷狗音乐做完了,过来分享下,也可以直接点这里预览,注意切换成手机模式. 技术栈: vue-router.eventBus.vuex.vue-awesome-swiper 整体功能 vs 酷狗官网: 总体模拟官网,原来的亮点保留,如: 图片懒加载 除此之外,增加了 加了全局的 Loading 组件,根据不同页面调整 Loading 尺寸 搜索页面做了优化,可以在刷新时保留之前的搜索结果 播放页面单独做了一个路由,可以在刷新时保留当前歌曲页面 播放器

  • 一步步带你用vite简单搭建ts+vue3全家桶

    目录 一.vite环境搭建,构建vite-vue-ts项目 1.安装vite环境 2.使用vite初始化vite+vue+ts的项目 3.选择项目类型为vue+ts 二.项目配置 1.vue-router 配置 2.vuex 配置 3.vite.config.ts 配置 总结 一.vite环境搭建,构建vite-vue-ts项目 1.安装vite环境 npm init @vitejs/app 或者 yarn create @vitejs/app 2.使用vite初始化vite+vue+ts的项目

随机推荐