Angular ng serve (angular -cli) на Windows не может найти файлы ресурсов, когда используется ссылка symboli c - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь решить проблему для разработчика Angular. Я не разработчик angular, но настраиваю данные для многоразового приложения Angular. Что мы пытаемся сделать, так это разрешить разработку основного инструмента Angular в одном Git репозитории и иметь параллельный Git репозиторий с конфигурацией приложения и файлами данных, многие из которых генерируются динамически. Среда Windows 10 со следующей версией Angular, и мы также используем Git Bash и терминал Cygwin windows для запуска командной строки ng и других команд.

Angular CLI: 7.3.5
Node: 10.15.3
OS: win32 x64
Angular:
...

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.13.5
@angular-devkit/core         7.3.5
@angular-devkit/schematics   7.3.5
@schematics/angular          7.3.5
@schematics/update           0.13.5
rxjs                         6.3.3
typescript                   3.2.4

Чтобы разрешить переключение между конфигурациями данных, мы хотим использовать символ c ссылку, например src/assets/app -> some/data/folder/in/a/repo. Папки назначения и ссылки игнорируются файлами .gitignore, поскольку они являются динамическим содержимым c. Я следил за статьей Jo sh Kelley о символических ссылках , чтобы включить символические ссылки в Windows 10, и настроил Cygwin, Git Bash (MinGW) и Git. Я вижу символические ссылки в Git Bash и терминале Cygwin, Windows Explorer, Windows командной строке, cd через каталог ссылок, et c. Итак, из операционной системы ссылки работают во всех средах. Я также попытался создать символическую ссылку со стороны Windows с mklink /d и со стороны Git Bash с аналогичными результатами.

Файл angular.json имеет "preserveSymlinks": true, хотя в документации по этой особенности мне не понятно. Означает ли это, что путь, видимый для Angular, будет путь ссылки symboli c, а не расширенный базовый путь? Это свойство, кажется, упоминается в статьях поддержки, относящихся к программным библиотекам и коду, но я не видел обсуждения этого, связанного с папкой ресурсов, и этот вопрос касается папки ресурсов.

"projects": {
    "info-mapper": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "app",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/info-mapper",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "preserveSymlinks": true,

Когда ng serve запускается в оболочке Git Bash, приложение отображается нормально и может получить доступ к основному файлу конфигурации в верхней папке. Однако любые файлы данных в папках ниже основной приводят к ошибке 404. Путь, который отображается в сообщениях об ошибках консоли браузера, является правильным и использует путь символической ссылки (а не путь базовой операционной системы), как задумано. Если я использую обходной путь, описанный ниже, он будет работать нормально.

Мы застряли. Без возможности ссылки symboli c обходной путь:

  1. скопируйте все файлы ресурсов из репозитория данных в папку ресурсов Angular веб-приложения (не очень хорошо, потому что есть много файлов, которые нужно многократно copy)
  2. используйте символическую c ссылку в другом направлении (assets/app <- path/to/some/data/folder), что в основном похоже на # 1, но принимающая папка (символическая ссылка) находится в репозитории данных.

Любое из этих решений затрудняет быстрое перенаправление приложения Angular для использования новой конфигурации данных в рабочих файлах другого репозитория. Похоже, что другие люди столкнулись бы с этим. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 июня 2020

Мне не удалось получить символьную c ссылку из папки src/assets проекта Angular в другую папку для работы с Windows, но позже могу потратить на это больше времени. Все в операционной системе выглядит нормально, но Angular возвращает ошибку 404 для чего-либо в подпапках связанной папки. Вместо этого я воспользовался методом грубой силы, написав сценарий для копирования файлов из другой папки в папку src/assets проекта Angular. Нам может потребоваться это сделать в любом случае, потому что пользователи, которые могут использовать это программное обеспечение, не являются разработчиками, и прыгать через обручи, чтобы включить символические c ссылки на Windows, это несколько затруднительно и, возможно, больше, чем они могут справиться. Я не собираюсь отмечать это как предпочтительный ответ в надежде, что кто-нибудь в конечном итоге даст лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...