使用 create-react-app配合express快速构建React开发环境

最近临时接了一个项目,需要快速搭建前后端环境,因为脱离团队使用的框架来做,所以首选了一个比较成熟的方案来快速启动 react 环境,省却了许多配置 webpack 的烦恼。

脚手架介绍

在这个环境下,Facebook 提供了一套不需要配置的 React 开发方案,即create-react-app。这个脚手架已经做好了基础 webpack 配置,带有自动更新,错误提示等等功能,仅仅需要创建,启动就可以快速开发。

这时也不得不提前端社区的另一个崛起者:yarn

Yarn与 npm 一样,是一款 NodeJS 包管理工具。 为何要选择使用 yarn 呢?官网的描述是:

Yarn 会缓存它下载的每个包,所以不需要重复下载。它还能并行化操作以最大化资源利用率,所以安装速度之快前所未有。

Yarn 在每个安装包的代码执行前使用校验码验证包的完整性。

Yarn 使用一个格式详尽但简洁的 lockfile 和一个精确的算法来安装,能够保证在一个系统上的运行的安装过程也会以同样的方式运行在其他系统上。

选用 Yarn 的原因也是因为他的速度提升比npm 要快,使用yarn add <package-name>yarn remove <package-name> 增删 node 包(对应npm installnpm uninstall).

另一点是,yarn 在更新之后,集成了create,通过yarn create,可以快速启动一个项目。

  • yarn create react-app my-app

  • yarn create react-native-app my-app

  • yarn create next-app my-app

如何使用

假设我们需要创建一个demo-app项目:

  1. 创建目录yarn create react-app demo-app

    • 稍等片刻,yarn 会为我们创建一个目录,拉取依赖,wepack 的配置通过 yarn 来调用,可以看到目录结构很干净

    • 安装完后会有清晰的提示

  2. 开始开发:cd demo-app && yarn start

    • 这时会启动一个默认端口为3000的页面,如果端口冲突,会提示你是否选用另一个端口

    • 进入src目录开始开发即可

  3. 开发完成后需要发布时,运行yarn build进行编译,发布build目录

    • 创建完成会自动生成build文件夹,将 js,css 文件放入 static 目录中

    • 发布build目录即可

三部曲完成,中间省略了非常多配置问题,给需要快速构建项目带来了极大的便利性。当然,默认配置也许不能够满足所有需求,create-react-app也提供了 抛出所有配置项的yarn eject供给开发者使用,如果需要到调整 webpack 的内容,就需要使用到这个命令。不过这样也会导致不能再回滚。官方的更新比较快,如果不是必要的情况建议直接使用内置的行为。

配合 Express 构建 server 端应用

如果在项目开发过程中需要 express 构建server 端应用,那么开发模式就需要有小调整。

  1. 首先创建一个叫server的文件夹和初始化 package.json文件:

    • mkdir server && cd server && yarn init

  2. 增加依赖包

    • yarn add express body-parser nodemon babel-cli babel-preset-es2015

    • 主要用到express,body-parser,nodemon(检测node.js 改动并自动重启,适用于开发阶段),babel-clibabel-preset-es2015(以便使用 es6开发)

  3. 修改package.json,增加npm scripts

    {
       "scripts": {
         "start": "nodemon --exec babel-node -- ./server.js","build": "babel ./server.js --out-file server-compiled.js","serve": "node server-compiled.js"
       }
     }
    • 这里使用nodemon在开发阶段检测node.js 改动并自动重启

    • 发布build的时候则通过 babel编译成 es5的文件

create-react-app会启动一个静态资源服务器,那么同时需要进行 server 端的时候需要怎么做呢?

我们回过头来去修改一下demo-app目录下的package.json

create-react-app会默认添加好4段scripts:

"scripts": {
    "start": "react-scripts start","build": "react-scripts build","test": "react-scripts test --env=jsdom","eject": "react-scripts eject"
  }

我们需要对 startbuild做调整,以便可以同时启动前端开发页面以及后端服务。在这里引入concurrently这个包来执行两条命令:

yarn add concurrently

package.json:

"scripts": {
    "react-start": "react-scripts start","start": "concurrently 'yarn react-start' 'cd server && yarn start'","react-build": "react-scripts build","build": "concurrently 'yarn react-build' 'cd server && yarn build'",},

这样,我们只要执行yarn start会同步启动 webpack 以及 server文件夹下的 nodeman.

Proxy

如果我们在前端页面用使用fetch(/api/data)这样 请求,默认是会发送到create-react-app 启动的 localhost:3000/api/data去的,无法达到目的。为了指向 server 端,需要指定proxy:

假设 server 端 express 启动了5000端口,则需要在package.json中增加:

"proxy": "http://127.0.0.1:5000"

这时当你使用fetch(/api/data)请求,则会指向到localhost:5000/api/data

轻松的开始开发吧~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom