2017-10-16 70 views
1

我开始创建一个本地原因单元测试库,由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之间的版本号是有区别的 - 但我怀疑这是问题的根源。

回答

1

我提出以下建议:

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

相关问题