Snowpack: справочные файлы вне папки проекта

Наша команда разрабатывает множество браузерных приложений на JavaScript. Эти приложения имеют общие функциональные возможности (основные) и веб-компоненты (общие). Структура папок:

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

Каждая папка содержит src папка.

Учитывая использование снежного покрова в папке app-1 Я хочу сослаться на файлы js в /core/src или же /shared/src как для разработки (с использованием snowflake dev) и упаковка (с использованием snowflake build)

  1. Это возможно?
  2. есть ли лучшие практики, как этого добиться?
  3. есть ли примеры для такой ситуации (или подобной)

Что пробовал:

Шаг 1: Я использовал такие пути: ../../core/src/router.js. Это не сработало, возможно потому, что ресурсы находились за пределами корневого веб-узла тестового сервера (snowflake dev).

Шаг 2: я создал две символические ссылки:

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

Теперь локальный сервер нашел все ресурсы. Однако процесс сборки обнаружил только те файлы, которые были прямыми дочерними элементами core/src или же shared/src, но не любой файл в подпапке, например shared/src/component/filter.js.

Есть идеи или мысли?

Приложение

В snowpack.config.json приложения-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

2 ответа

Я немного опоздал на вечеринку, но столкнулся с той же проблемой.

Я решил это, добавив:

        workspaceRoot: '..',

к snowpack.config.js.

По сути, он сообщает Snowpack обрабатывать все из родительской папки ( ..) через его трубопровод. Он подберет зависимости и все обработает.

В вашем случае вы можете импортировать файлы из shared в app-1 используя относительные пути и не создавая символических ссылок:

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

Вы можете узнать больше о workspaceRootсвойство в документации снежного покрова .

У вас должна быть возможность указать относительный путь к папке в вашем mount объект как другой ключ:

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

это должно обслуживать ваши файлы из shared каталог из /_dist_ папка.

Другие вопросы по тегам