0

我正在编写一个在 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文件?

我尝试使用blacklistREatmetro.config.js但它没有用:

const exclusionList = require('metro-config/src/defaults/exclusionList');

module.exports = {
  resolver: {
    blacklistRE: exclusionList([/src\/.*.res/])
  }
};
4

0 回答 0