使用本地包

问题描述 投票:20回答:3

我在本地目录中有一个Elm包(源代码+所有构建工件),我想从另一个Elm包中使用它,而不发布库。所以我的目录设置如下所示:

/
  my-lib/
    elm-package.json
  my-app/
    elm-package.json

首先,在库包的目录中运行elm-package install似乎不仅仅是构建包;据我所知,它没有安装在任何全局目录中。

我已经将my-lib添加到my-app/elm-package.json中:

"dependencies": {
    "elm-lang/core": "1.0.0 <= v < 2.0.0",
    "my-vendor/my-lib": "0.0.1 <= v <= 0.0.1"
}

因此,当我在依赖包目录中运行elm-make时,它会抱怨

你的电脑上没有my-vendor/my-lib软件包的版本。

elm-package install抱怨同样的事情。

我发现的唯一解决方法是在my-app中创建以下符号链接:

/
  my-app/
    elm-stuff/
      packages/
        my-vendor/
          my-lib/
            0.0.1@ -> /my-lib/
      build-artifacts/
        my-vendor@ -> /my-lib/build-artifacts/my-vendor

我还必须将以下内容添加到/my-app/elm-stuff/exact-dependencies.json

"my-vendor/elm-lib": "0.0.1"

显然,如果我能从elm-package指向/my-lib/,那么所有上述内容都应该由/my-app/自动处理。那我该怎么做?

elm
3个回答
7
投票

在todo列表中更容易使用本地包。我担心你目前的做法是最先进的。要么就像你现在这样做,要么复制包中的代码(或者my-lib/srcmy-app/src的符号链接模块文件夹/ .elm文件?)

关于这个问题的邮件列表上的最新帖子:https://groups.google.com/d/topic/elm-discuss/i51Bor6Uers/discussion


19
投票

在2017年(榆木0.18),您可以执行以下操作:

使用本地克隆版本覆盖已发布的包

如果您对要发布的本地包已发布依赖,请删除您的依赖项,例如:

"dependencies": {
    "rtfeldman/elm-css": "8.2.0 <= v < 9.0.0"
}

然后做你的项目的elm-make(这应该从你的elm-stuff目录中删除包,否则它将使用包的缓存版本。然后你按照下面的步骤在本地克隆和引用包。

引用本地包

您可以在本地引用任何elm项目,方法是将其添加到source-directories,如下所示:

"source-directories": [
    ".",
    "src",
    "../elm-css/src"
],

将本地引用的包的依赖项添加到elm-package.json

elm-css有这些依赖关系:

    "rtfeldman/elm-css-util": "1.0.2 <= v < 2.0.0",
    "rtfeldman/hex": "1.0.0 <= v < 2.0.0"

所以也要将它们添加到你的elm-package.json中。

你完成了!


7
投票

您可以在this enhancement request中跟踪此功能的状态。

© www.soinside.com 2019 - 2024. All rights reserved.