gpt4 book ai didi

npm - 如何为 BuckleScript/ReasonML 打包节点模块?

转载 作者:行者123 更新时间:2023-12-04 09:39:29 26 4
gpt4 key购买 nike

背景

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

目标:使用 npm 在我的项目中安装我的新包本地包

我正在尝试用 JavaScript 包装服务 worker api 的某些部分。我从一个文件 bs-service-worker/src/ExtendableEvent.re 开始,就像这样

type _extendableEvent('a);
type extendableEvent_like('a) = Dom.event_like(_extendableEvent('a));
type extendableEvent = extendableEvent_like(Dom._baseClass);

[@bs.send] external waitUntil: (extendableEvent, Js.Promise.t('a)) => unit
= "waitUntil";

这将按预期编译并生成 ExtendableEvent.bs.js。

不过,现在我想继续通过创建一个新的 npm 项目并导入我在本地拥有的东西来测试我目前拥有的东西。我创建了一个新的同级目录并执行了 npm install ../bs-service-worker .成功了,然后我对我的新 BuckleScript 项目进行了健全性检查。那也成功了。

问题:打开我的模块会导致错误

当我添加 open 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-service-worker”列为 bs 依赖项。我还尝试了“../bs-service-worker”,以防 BuckleScript 不喜欢虚拟目录,但它似乎没有帮助。
  • 我的 npm run build命令确实是 npx bsb -make-world .

  • 更多代码:

    bs-service-worker/bs-config.json

    {
    "name": "bs-service-worker",
    "version": "0.1.0",
    "sources": {
    "dir" : "src",
    "subdirs" : true,
    "public": "all"
    },
    "package-specs": {
    "module": "commonjs",
    "in-source": true
    },
    "suffix": ".bs.js",
    "bs-dependencies": [

    ],
    "warnings": {
    "error" : "+101"
    },
    "namespace": true,
    "refmt": 3
    }

    bs-service-worker-examples/bsconfig.json

    {
    "name": "bs-service-worker-examples",
    "version": "0.1.0",
    "sources": {
    "dir" : "src",
    "subdirs" : true
    },
    "package-specs": {
    "module": "commonjs",
    "in-source": true
    },
    "suffix": ".bs.js",
    "bs-dependencies": [
    "bs-service-worker",
    "bs-fetch",

    ],
    "warnings": {
    "error" : "+101"
    },
    "namespace": true,
    "refmt": 3
    }

    bs-service-worker-examples/package.json

    {
    "name": "bs-service-worker-examples",
    "version": "0.0.1",
    "scripts": {
    "build": "npx bsb -make-world",
    "start": "npx bsb -make-world -w",
    "clean": "npx bsb -clean-world"
    },
    "keywords": [
    "BuckleScript"
    ],
    "author": "Eleanor (https://webbureaucrat.bitbucket.io)",
    "license": "MIT",
    "devDependencies": {
    "bs-platform": "^7.3.2"
    },
    "dependencies": {
    "bs-fetch": "^0.6.1",
    "bs-service-worker": "file:../bs-service-worker"
    }
    }

    轻松重现问题

    重现这种情况的最快方法是 fork this repository并尝试将其添加为本地 npm 依赖项。

    最佳答案

    问题似乎是你有 "namespace": true在您图书馆的bsconfig.json ,它将所有模块包装在一个命名空间模块中,其名称基于 name field 。在这种情况下,它将是 BsServiceWorker我认为。

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

    "namespace": "ServiceWorker"

    然后您可以打开 ExtendableEvent在消费者项目中:

    open ServiceWorker.ExtendableEvent;

    更多详情,请参阅 documentation on the namespace field .

    关于npm - 如何为 BuckleScript/ReasonML 打包节点模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62395558/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com