我正在编写一个在 react native 中使用 rescript 的项目(这里,它在 expo 中)
在这个项目中,我一直在单独的终端中运行两个命令:
yarn rescript build -w
这使得 rescript 监视.res
文件中的更改并将它们编译为.js
yarn start
这使得 react native(metro bundler)监视任何文件更改并触发应用程序重新加载
我遇到的第一个问题是,当我保存.res
文件时,metro 会触发应用程序重新加载并重新编写文件以将文件重新编译为.js
所以我的应用程序最终得到了过时的.js
文件(rescript save -> reload | 然后在热重载完成之前重新编写为 js)。
我遇到的第二个问题是,在第二次保存后,metro 崩溃了:
<PROJECT-PATH>/nice-animals-res/node_modules/metro-hermes-compiler/src/emhermesc.js:81
throw ex;
^
RuntimeError: abort(Error: not opened). Build with -s ASSERTIONS=1 for more info.
at process.abort (<PROJECT-PATH>/nice-animals-res/node_modules/metro-hermes-compiler/src/emhermesc.js:796:13)
at process.emit (node:events:390:28)
at process.emit (<USER-PATH>/.asdf/installs/nodejs/17.3.0/.npm/lib/node_modules/expo-cli/node_modules/source-map-support/source-map-support.js:439:21)
at emit (node:internal/process/promises:136:22)
at processPromiseRejections (node:internal/process/promises:242:25)
at processTicksAndRejections (node:internal/process/task_queues:97:32)
我相信这是由两个进程试图对同一个文件做某事引起的......
无论如何,我相信这些问题可以通过让 Metro 简单地不关注.res
文件中的更改(因此不重新加载)来解决,那么,有没有办法告诉 Metro(或守望者)不观看 .res
文件?
我尝试使用blacklistRE
atmetro.config.js
但它没有用:
const exclusionList = require('metro-config/src/defaults/exclusionList');
module.exports = {
resolver: {
blacklistRE: exclusionList([/src\/.*.res/])
}
};