创建理由封装,具有不同的命名空间名称与NPM包
问题描述:
我开始创建一个本地原因单元测试库,由RSpec的启发(我做了一个F#以前)创建理由封装,具有不同的命名空间名称与NPM包
我想调用库Respect
,但由于已经有一个名为“尊重”的npm包,我将npm库命名为“重新尊重”。但我bsconfig.json
指定我推了包,并从一个测试项目,在这里我引用Respect
命名空间导入它作为respect
{
"name": "Respect",
"version": "0.1.0",
"namespace": true,
"sources": [
{"dir": "src"},
{
"dir": "tests",
"type": "dev"
}
],
"bs-dependencies" : [
// add your bs-dependencies here
]
}
包的名称。我在这个项目这个原因源文件:
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
,它试图找到代码。
我在做我不应该做的事吗?我的根名称空间应该遵循NPM包名吗?我需要找到一个新的名字吗?
p.s.在写这篇文章的时候,我意识到package.json和bsconfig.json之间的版本号是有区别的 - 但我怀疑这是问题的根源。
答
我提出以下建议:
- 关闭命名空间为您的项目
- 保持
re-respect
名称为您的NPM库,为bsconfig.json
文件 - 保持一个文件
Respect.re
为主要模块的项目。将公开曝光为Respect
模块和用户可以访问它作为主要的模块
这里的关键外卖是,你并不总是需要命名空间,特别是如果你的项目自然是单一主模块下适合。
编辑:您Dsl
嵌套的模块,你可能要保持它的Respect.re
文件中的语法嵌套模块:
/* Respect.re */
module Dsl = {
...
};
或者你可能要保持它在自己的文件,这很好,你“-111只需要做多一点跑腿在这种情况下,通过确保您命名空间,那么它的别名手动:
/* Respect_dsl.re */
...
/* Respect.re */
module Dsl = Respect_dsl;
...
然后用户将能够像以前一样访问它Respect.Dsl
。