我开始创建一个原生的Reason单元测试库,受RSpec的启发(之前我为F#做了一个)
我想调用库Respect
,但由于已经有一个名为"尊重"的npm包,我命名了npm库"重新尊重"。但我的bsconfig.json
将包名称指定为respect
{
"name": "Respect",
"version": "0.1.0",
"namespace": true,
"sources": [
{"dir": "src"},
{
"dir": "tests",
"type": "dev"
}
],
"bs-dependencies" : [
// add your bs-dependencies here
]
}
我推送了包,并从测试项目中导入它,在那里我引用了Respect
命名空间。我在项目中有这个原因源文件:
open Respect.Dsl;
describe "Foo" [
it "has a test" (fun _ => ())
] |> register;
!rootContext |> run;
使用npm run build
构建代码工作正常,但是当我运行测试时,我收到错误:
module.js:529
throw err;
^
Error: Cannot find module 'Respect/lib/js/src/dsl.js'
at Function.Module._resolveFilename (module.js:527:15)
...
错误很明显 - npm软件包安装在node_modules/re-respect
而不是node_modules/Respect
,它会尝试查找代码。
我是不是想做一些我不应该做的事情?我的root命名空间是否应遵循NPM包名称?我需要找一个新名字吗?
P.S。在我写这篇文章时,我意识到package.json和bsconfig.json中的版本号之间存在差异 - 但我怀疑这是问题的根源。
答案 0 :(得分:1)
我建议如下:
re-respect
名称和bsconfig.json
文件Respect.re
保留为项目的主要模块。它将作为Respect
模块公开公开,用户可以将其作为主模块进行访问这里的关键点是你并不总是需要命名空间,特别是如果你的项目自然适合单个主模块。
编辑:对于Dsl
嵌套模块,您可能希望将其作为语法嵌套模块保存在Respect.re
文件中:
/* Respect.re */
module Dsl = {
...
};
或者您可能希望将其保存在自己的文件中,这很好,在这种情况下,您只需要做一些更多的工作,确保命名空间然后手动别名:
/* Respect_dsl.re */
...
/* Respect.re */
module Dsl = Respect_dsl;
...
然后,用户就可以像Respect.Dsl
一样访问它。