【问题标题】:Creating a Reason package with a different namespace name than the NPM package使用与 NPM 包不同的命名空间名称创建一个 Reason 包
【发布时间】:2017-10-17 03:19:25
【问题描述】:

在 RSpec 的启发下,我开始创建一个原生 Reason 单元测试库(我之前为 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 它试图找到代码的地方。

我是否正在尝试做我不应该做的事情?我的根命名空间应该跟在 NPM 包名后面吗?我需要找一个新名字吗?

附言在我写这篇文章时,我意识到 package.json 和 bsconfig.json 中的版本号之间存在差异 - 但我怀疑这是问题的根源。

【问题讨论】:

    标签: reason bucklescript bsconfig


    【解决方案1】:

    我推荐以下:

    • 为您的项目关闭命名空间
    • 为您的 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

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 2018-01-17
      • 2011-03-21
      • 2014-02-18
      • 2016-01-23
      • 1970-01-01
      相关资源
      最近更新 更多