Node.js 如何在react应用程序中禁用文件监视 编辑:
我现在的问题是,是否可以在类似于生产环境的环境中启动带有react脚本的react应用程序,在这种环境中,我不一定希望对文件的更改影响正在运行的react服务器。在C下的“解决方案”部分查看下面关于我已经尝试过的内容的简要说明 在过去的两周里,我一直在为这个问题苦苦挣扎,我不确定如何继续。我想在Azure Web App(Linux)节点上托管我的React应用程序 我看到的问题是: 尝试的解决方案: 在网上阅读了这个问题后,我了解到解决方案可能包括 答:系统上没有空间。我已经用Node.js 如何在react应用程序中禁用文件监视 编辑:,node.js,reactjs,npm,Node.js,Reactjs,Npm,我现在的问题是,是否可以在类似于生产环境的环境中启动带有react脚本的react应用程序,在这种环境中,我不一定希望对文件的更改影响正在运行的react服务器。在C下的“解决方案”部分查看下面关于我已经尝试过的内容的简要说明 在过去的两周里,我一直在为这个问题苦苦挣扎,我不确定如何继续。我想在Azure Web App(Linux)节点上托管我的React应用程序 我看到的问题是: 尝试的解决方案: 在网上阅读了这个问题后,我了解到解决方案可能包括 答:系统上没有空间。我已经用df-h进行了检
df-h
进行了检查,看起来有足够的空间(我的机器至少有50%)
B:已达到文件观察者限制,这似乎是问题所在,但不幸的是Azure Web应用程序是一个只读文件系统,运行类似于echo fs.inotify.max_user_watches=524288 | sudo tee-a/etc/sysctl.conf&&sudo sysctl-p
的程序没有帮助
C:禁止使用React进行监视。但我似乎无法做到这一点,如果有人知道如何禁用React观看,我将不胜感激。到目前为止,我尝试了CI=true npm start
但没有成功(当我运行命令并对文件进行更改时,更改会主动反映在我的浏览器上:localhost:3000
我还尝试在node\u modules/react scripts/webpack.config.js
中添加大量选项,例如:
监视:false
和忽略:/node\u模块/
谢谢,
Nik我建议您重新考虑您的目标
,即在类似于生产的环境中启动带有react脚本的react应用程序
正如@adamz4008
提到的,您不应该在生产环境中运行development server。因此,您不会遇到监视问题,也不需要解决它
文件/最佳做法
根据软件开发最佳实践,有不同的开发阶段
Facebook React文档也涵盖了这些内容
在当地发展
npm开始
/纱线开始
以开发模式运行应用程序
构建
npm运行构建
/纱线构建
将用于生产的应用程序生成到生成文件夹
它正确地捆绑在生产模式下反应,并优化构建以获得最佳的性能
构建被缩小,文件名包括散列
您的应用已准备好部署
安装NPM依赖项
顺便说一句,通常人们在npm运行build
之前运行npm install
来安装所有必要的依赖项
但我建议使用npmci
。它具有确定性的稳定结果和更高的性能
发布/部署
由于您的应用程序只是一组静态文件,您可以简单地将其作为静态HTML网站部署到任何web服务器/平台
我的经验
在我使用Azure的实践经验中,我将React应用程序作为静态网站部署到存储帐户(无需明确使用/配置任何web服务器)
您可以选择任何其他选项。因此,您可以创建构建文件,然后使用小型本地服务器为目录中的静态文件提供服务
您可以运行纱线构建
,然后有一个脚本来运行此代码纱线节点。/server.js
(或任何您命名的脚本)
这可以允许performant构建和类似于react脚本启动的DevServer的服务器
我也不知道您是否需要在生产环境中进行评测,但我在react scripts build--profile
中添加了一个特性,它允许类名和函数名在整个过程中保持不变
const express=require(`express`);
require(`dotenv`).config();
快报()
.use(express.static(`${\uu dirname}/build`)
.get(`*`,(req,res)=>res.sendFile(`${u dirname}/build/index.html`)
.listen(process.env.PORT | | | 1234,()=>console.log(`uuuu服务器运行`uuuuuu`,process.env.PORT),
);
对于简单的情况(您的应用驻留在服务器根目录中,您没有客户端路由,您不必代理后端调用):
- 这是第一次使用
添加--dev http server安装http服务器
- 使用
warn Build构建应用程序
- 使用http服务器为构建的应用程序提供服务。/build
对于更复杂的情况,可以使用更高级的Web服务器,如其他答案中所述,也可以自己实现所需的行为。如果不希望实时重新加载,在生产环境中运行开发服务器的动机是什么?dev server/react脚本并不用于为产品提供服务在React应用程序上。如果它需要在生产环境中运行,为什么不简单地运行npm构建和托管静态资产?如果没有SSR,为什么React应用程序需要一个单独的节点服务器,而不是简单的Azure存储、S3等?这是一个好主意@adamz4008。所有在线指南都说要在Azure和上托管整个项目Azure将运行npm start。但是,由于Azure发生了变化,这些指南已经过时,并且它们没有解释哪个操作系统、哪个运行时环境等。也就是说,我将非常满意为最终构建提供服务。为此,我需要在Azure Web应用程序上进行客户端路由,我尝试了几次,但都没有成功erent web.config结构。您对此有经验吗?添加的约束:需要是Azure web app for Company
Starting the development server...
events.js:170
throw er; // Unhandled 'error' event
^
Error: ENOSPC: System limit for number of file watchers reached, watch 'xxx'
at FSWatcher.start (internal/fs/watchers.js:165:26)
at Object.watch (fs.js:1274:11)
at createFsWatchInstance (/home/u/work/some-repo/node_modules/chokidar/lib/nodefs-handler.js:37:15)
at setFsWatchListener (/home/u/work/some-repo/node_modules/chokidar/lib/nodefs-handler.js:80:15)
...
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! some-repo@0.1.0 start: `react-scripts start`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the some-repo@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/u/.npm/_logs/2019-08-30T09_50_59_595Z-debug.log