7

我们的团队开发了一堆 JavaScript 浏览器应用程序。这些应用程序共享功能(核心)和 Web 组件(共享)。文件夹结构为:

/apps
     /app-1
     /app-2
     ...
/core
/shared

每个文件夹包含一个src文件夹。

考虑在文件夹中使用 snowpackapp-1我想引用其中的 js 文件/core/src/shared/src两者都用于开发(使用snowpack dev)和打包(使用snowpack build

  1. 这可能吗?
  2. 是否有最佳实践如何实现这一目标?
  3. 是否有这种情况(或类似情况)的例子

我尝试了什么:

第 1 步:我使用了这样的路径:../../core/src/router.js. 这不起作用,可能是因为资源位于测试服务器的 webroot 之外 ( snowpack dev)。

第 2 步:我创建了两个符号链接:

apps/app-1/src/@core   -> ../../../core/src
apps/app-1/src/@shared -> ../../../shared/src

现在本地服务器找到了所有资源。然而,构建过程只找到了那些是core/srcor的直接子shared/src文件的文件,但没有找到子文件夹中的任何文件,例如shared/src/component/filter.js.

有什么想法或想法吗?

附录

snowpack.config.jsonapp-1 的:

{
    "devOptions": {
        "port": 8082,
        "open": "none"
    },
    "mount": {
        "public": "/",
        "src": "/_dist_"
    },
    "plugins": [
        "@snowpack/plugin-babel",
        "@snowpack/plugin-dotenv",
        "@snowpack/plugin-sass"
    ]
}

导入示例app-1/src/handler

import { loadRoute } from '../@core/router'    // works fine
import '../@shared/component/filter'           // does not work
// or:
import { loadRoute } from '../@core/router.js' // works fine, too
import '../@shared/component/filter.js'        // does not work neither
4

2 回答 2

3

您只需添加以下内容即可解决您的问题:

  workspaceRoot: '..',

到你的snowpack.config.js文件。

基本上它告诉 snowpack..通过它的管道处理来自父文件夹 ( ) 的所有内容。它将获取依赖项并处理所有内容。

在您的情况下,您可以使用相对路径从sharedin导入文件,而无需创建任何符号链接:app-1

import something from '../shared/something';

您可以在snowpack 的文档中找到有关workspaceRoot属性的更多信息。

于 2021-04-02T18:48:33.410 回答
0

您应该能够将mount对象中文件夹的相对路径指定为另一个键:

{
  "mount": {
    "../../shared": "/_dist_"
  }
}

这应该shared从文件夹的目录中提供您的/_dist_文件。

于 2021-01-21T11:59:10.513 回答