Npm 如何为BuckleScript/ReasonML打包节点模块? 背景

Npm 如何为BuckleScript/ReasonML打包节点模块? 背景,npm,reason,bucklescript,Npm,Reason,Bucklescript,我是BuckleScript的绝对初学者,虽然我以前用npm下载过包,但我从未编写过库 目标:使用npm在项目中安装我的新包本地包 我试图用JavaScript封装服务工作者api的一些部分。我从一个文件bs-service-worker/src/ExtendableEvent.re开始 类型_extendableEvent('a); 类型extendableEvent_like('a)=Dom.event_like(_extendableEvent('a)); 类型extendableEven

我是BuckleScript的绝对初学者,虽然我以前用npm下载过包,但我从未编写过库

目标:使用npm在项目中安装我的新包本地包 我试图用JavaScript封装服务工作者api的一些部分。我从一个文件bs-service-worker/src/ExtendableEvent.re开始

类型_extendableEvent('a);
类型extendableEvent_like('a)=Dom.event_like(_extendableEvent('a));
类型extendableEvent=extendableEvent_like(Dom._基类);
[@bs.send]外部等待:(extendableEvent,Js.Promise.t('a))=>单位
=“等待”;
这将按照预期编译并生成ExtendableEvent.bs.js

现在,尽管如此,我想通过创建一个新的npm项目并导入我在本地拥有的东西来继续测试我目前拥有的东西。我创建了一个新的同级目录,并安装了一个
npm../bs-service-worker
。这成功了,然后我在我的新BuckleScript项目上做了一个健全性检查构建。这也取得了成功

问题:打开我的模块会导致错误 当我添加
打开ExtendableEvent时要在新项目中使用Demo.re,我会遇到以下错误:

  We've found a bug for you!
  /home/el/workbench/bucklescript/bs-service-worker-examples/src/Demo.re 11:6-20

   9 │  
  10 │ /**/  
  11 │ open ExtendableEvent;  
  12 │   
  13 │ /*  

  The module or file ExtendableEvent can't be found.
  - If it's a third-party dependency:  
    - Did you list it in bsconfig.json?  
    - Did you run `bsb` instead of `bsb -make-world`  
      (latter builds third-parties)?  
  - Did you include the file's directory in bsconfig.json?  
我试过的
  • 我猜我在这里误用了BuckleScript而不是npm,因为npm被广泛采用并且有很好的文档记录,我想我已经发现了这个问题,但我绝对不排除我也误用npm的可能性
  • 我确实将“bs服务人员”列为bs依赖项。我还尝试了“./bs服务工作者”,以防BuckleScript不喜欢虚拟目录,但它似乎没有帮助
  • 我的
    npm run build
    命令实际上是
    npx bsb-make world
更多代码: bs服务工作者/bs-config.json

{
“姓名”:“bs服务人员”,
“版本”:“0.1.0”,
“资料来源”:{
“dir”:“src”,
“细分市场”:没错,
“公共”:“所有”
},
“包装规格”:{
“模块”:“commonjs”,
“来源中”:正确
},
“后缀”:“.bs.js”,
“bs依赖项”:[
],
“警告”:{
“错误”:“+101”
},
“名称空间”:true,
“refmt”:3
}
bs服务工作者示例/bsconfig.json

{
“名称”:“bs服务人员示例”,
“版本”:“0.1.0”,
“资料来源”:{
“dir”:“src”,
“细分市场”:正确
},
“包装规格”:{
“模块”:“commonjs”,
“来源中”:正确
},
“后缀”:“.bs.js”,
“bs依赖项”:[
“bs服务人员”,
“bs fetch”,
],
“警告”:{
“错误”:“+101”
},
“名称空间”:true,
“refmt”:3
}
bs服务工作者示例/package.json

{
“名称”:“bs服务人员示例”,
“版本”:“0.0.1”,
“脚本”:{
“构建”:“npx bsb-创造世界”,
“开始”:“npx bsb-创造世界-w”,
“清洁”:“npx bsb-清洁世界”
},
“关键词”:[
“BuckleScript”
],
“作者”:“埃莉诺”(https://webbureaucrat.bitbucket.io)",
“许可证”:“麻省理工学院”,
“依赖性”:{
“bs平台”:“^7.3.2”
},
“依赖项”:{
“bs fetch”:“^0.6.1”,
“bs服务人员”:“文件:../bs服务人员”
}
}
这一问题很容易复制
最快的复制方法是分叉,并尝试将其添加为本地npm依赖项

问题似乎在于,您的库的
bsconfig.json
中有
“namespace”:true
,它将使用基于
name
字段生成的愚蠢名称将所有模块包装在名称空间模块中。在这种情况下,我想应该是
BsServiceWorker

您可以删除该设置,或者将其设置为
false
,但名称空间是一个好主意,可以避免来自不同库或您自己的应用程序的模块之间发生冲突,因此我建议将其设置为自定义的、合理的名称。例如:

"namespace": "ServiceWorker"
然后,您可以在consumer项目中打开
ExtendableEvent
,方法是:

打开ServiceWorker.ExtendableEvent;

有关详细信息,请参阅。

将命名空间设置为字符串。我还想为将来的观众确认:是的,当设置为
true
时,基于name字段的名称空间模块是
bsserviceworner
。多谢各位!