在一个JavaScript项目中,当我试图从理性开始的时候,我得到了一个非常轻的文件,它试图成为现有的、繁重的库的一个原因类型的接口:
/* TheLibrary.re */
type engine
external addEngine : string -> engine -> unit = "" [@@bs.val] [@@bs.module "../"]但是,当我尝试在ReasonReact项目中使用该库时(已经将@org/the-library添加到bsconfig.json bs-dependencies中),
/* AComponent.re */
[@bs.val] [@bs.module "@org/game-engine/dist/game-engine.js"]
external gameEngine : TheLibrary.engine = "default";
/* Further down, a React lifecycle method, */
TheLibrary.addEngine("Game", gameEngine);我发现没有找到../的错误,相对于React组件
./src/components/main-menu/AComponent.re
Module not found: Can't resolve '../' in '/Users/ec/Work/reason-reacty/src/components/main-menu'我也尝试过,而不是在TheLibrary.re的external声明中使用external:
@bs.module "./index.js" (有关包的非类型化-JavaScript端的直接ES6入口点)@bs.module "@org/the-library",所述库的全名(即使我在该库中键入??)请帮帮我!我希望能够进一步采用ML,但我正面临着最困难的时刻,那就是ReasonReact的依赖解决方案!
其他背景:
因此,我们正在尝试构建我们的第一个ReasonReact项目,我们已经成功地将婴儿的第一个不透明的类型添加到了我们的内部库中,并将其包含在ReasonReact页面中,包括以下内容--顺便说一句,这是可行的:
/* Imports.re */
type engine;
[@bs.val] [@bs.module "@org/game-engine/dist/game-engine.js"]
external gameEngine : engine = "default";
[@bs.val] [@bs.module "@org/the-library"] [@bs.scope "default"]
external addEngine : (string, engine) => unit = "";当我们使用Imports.(addEngine("Game", gameEngine))时,这会产生我们需要的全局设置行:TheLibrary.addEngine("Game", GameEngine)。我正处于第一阶段,尝试向父项目上游输入信息,并将代码发布到npm,以便所有消费项目都能开始使用理性。
发布于 2019-01-14 23:52:05
听起来你可能对构成你的工具链的不同工具感到有点困惑,所以让我们先逐一看一遍,把它们放在它们的位置上:
现在,我怀疑您已经知道了其中的大部分内容,但是您似乎不知道的是,这些都没有真正解决依赖关系的问题。您的工具链的下面这些部分是这样做的:
src中指定的内容以及在bs-dependecies in bsconfig.json中列出的任何BuckleScript库在本地项目中查找所有模块的内容。它将计算出所有这些模块的依赖顺序,并按照正确的顺序将它们提供给编译器,以便为每个OCaml模块生成一个OCaml模块(以及包含类型信息等的其他伪)。但它不会解决任何JavaScript依赖关系。使用[@bs.module "some-module"]将使BuckleScript编译器发出var ... = require('some-module') (如果使用es6,则会发出import ... from 'some-module' ),但是BuckleScript本身不会对它做任何事情。传递给@bs.module的字符串与传递给require的字符串相同,如果它是一个普通的CommonJS模块(或您配置的其他模块格式)。
还请注意,导入不是在定义external的地方发出的,而是在使用它的地方发出的。您可以通过将它作为一个普通定义再导出,或者在模块中“接地”它。let addEngine = addEngine。
为了准确地回答您的问题,我需要知道您使用哪个绑定器,在哪里配置了BuckleScript以输出其JavaScript伪制品,在哪里使用了外部元素,而不仅仅是定义了外部包,以及外部JavaScript模块位于何处。但我希望所有这些潜在的知识将使您和未来的读者更容易识别和解决问题。如果您仍然有些不确定,请查看已编译的JavaScript人工制品,并将它们作为普通的JavaScript模块来处理。在这一点上,这就是他们真正的全部。
https://stackoverflow.com/questions/54190447
复制相似问题