使用与 NPM 包不同的命名空间名称创建 Reason 包
Creating a Reason package with a different namespace name than the NPM package
我开始创建本地 Reason 单元测试库,受到 RSpec 的启发(我之前为 F# 做过一个)
我想调用库 Respect
,但由于已经有一个名为 "respect" 的 npm 包,我将 npm 库命名为 "re-respect"。但是我的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
它试图找到代码的地方。
我是不是在做不该做的事?我的根命名空间应该跟在 NPM 包名称之后吗?我需要找一个新名字吗?
p.s。在我写这篇文章时,我意识到 package.json 和 bsconfig.json 中的版本号之间存在差异 - 但我怀疑这是问题的根源。
我推荐以下内容:
- 关闭项目的命名空间
- 为您的 npm 库和
bsconfig.json
文件保留 re-respect
名称
- 保留一个文件
Respect.re
作为项目的主要模块。它将作为 Respect
模块公开,用户可以将其作为主模块访问
这里的关键要点是您并不总是需要命名空间,尤其是当您的项目自然适合单个主模块时。
编辑:对于您的 Dsl
嵌套模块,您可能希望将其作为语法嵌套模块保存在 Respect.re
文件中:
/* Respect.re */
module Dsl = {
...
};
或者您可能希望将其保存在自己的文件中,没关系,在这种情况下,您只需要多做一些工作,确保命名空间然后手动为其命名:
/* Respect_dsl.re */
...
/* Respect.re */
module Dsl = Respect_dsl;
...
然后用户将能够像以前一样访问它 Respect.Dsl
。
我开始创建本地 Reason 单元测试库,受到 RSpec 的启发(我之前为 F# 做过一个)
我想调用库 Respect
,但由于已经有一个名为 "respect" 的 npm 包,我将 npm 库命名为 "re-respect"。但是我的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
它试图找到代码的地方。
我是不是在做不该做的事?我的根命名空间应该跟在 NPM 包名称之后吗?我需要找一个新名字吗?
p.s。在我写这篇文章时,我意识到 package.json 和 bsconfig.json 中的版本号之间存在差异 - 但我怀疑这是问题的根源。
我推荐以下内容:
- 关闭项目的命名空间
- 为您的 npm 库和
bsconfig.json
文件保留re-respect
名称 - 保留一个文件
Respect.re
作为项目的主要模块。它将作为Respect
模块公开,用户可以将其作为主模块访问
这里的关键要点是您并不总是需要命名空间,尤其是当您的项目自然适合单个主模块时。
编辑:对于您的 Dsl
嵌套模块,您可能希望将其作为语法嵌套模块保存在 Respect.re
文件中:
/* Respect.re */
module Dsl = {
...
};
或者您可能希望将其保存在自己的文件中,没关系,在这种情况下,您只需要多做一些工作,确保命名空间然后手动为其命名:
/* Respect_dsl.re */
...
/* Respect.re */
module Dsl = Respect_dsl;
...
然后用户将能够像以前一样访问它 Respect.Dsl
。