2017-01-31 15 views
0

Я ищу лучший способ организовать свою базу кода с общими ресурсами, совместно используемыми между различными проектами. У меня три приложения aurelia. В каждом из них я добавил несколько ресурсов в папку ресурсов (пользовательские элементы, атрибуты и т. Д.). Когда мне было нужно, чтобы он уже писал в другом проекте, я просто вложил его. Теперь у меня есть время для рефакторинга, я бы хотел переместить все эти ресурсы в выделенный репозиторий. Затем я хочу иметь возможность выбирать только те ресурсы, которые мне нужны в каждом проекте.Внешние ресурсы Aurelia

Я попытался разместить все ресурсы в репо с задачей сборки gulp из каркаса aurelia, которые позволяют мне создавать модули AMD всех моих модулей. Затем я смог загрузить некоторые модули отдельно, добавив их в aurelia.json. Для Exemple для атрибута:

{ 
    "name": "aurelia-resources-progress-button", 
    "path": "../node_modules/SHG-aurelia-resources/dist/amd/resources/attributes", 
    "main": "progress-button" 
} 

или пользовательского элемент:

{ 
    "name": "aurelia-resources-avatar-upload", 
    "path": "../node_modules/SHG-aurelia-resources/dist/amd/resources/elements/avatar-upload", 
    "main": "avatar-upload", 
    "resources": [ 
    "avatar-upload.html", 
    "avatar-upload.css" 
    ] 
} 

Он работал как шарм, но он не для преобразователя значений, который импортировать модуль из относительного пути. Файл находится в:

"projectRoot/node_modules/SHG-aurelia-resources/dist/amd/resources/value-converters/duration-format.js", it import from '../utils./strings'

и

Я получаю следующее сообщение об ошибке, когда я Àu запустить:

"Error: ENOENT: no such file or directory, open '/Users/hadrien/Documents/dev/SportHeroes/united-heroes/src/resources/utils/strings.js'".

странное дело, когда мне требуется относительный модуль из шаблона (например, в пользовательском атрибуте кнопки прогресса) нет проблем.

Я не хочу создавать плагин, потому что я не хочу загружать все модули своего репо. Я бы хотел, если бы это было возможно, было бы иметь возможность устанавливать .feature ('../node_modules/path/resources') и загружать их, как я загружаю свои локальные ресурсы.

Что мне делать?

+0

Почему вы не хотите использовать плагин? API для плагина и функции практически одинаковы. Вы уже распространяете ресурсы через пакеты NPM, поэтому правильный способ сделать это через API плагина. –

+0

Потому что я не хочу загружать все модули. Представьте, что у меня есть 10 модулей в моих внешних ресурсах.Приложение A использует 10, я мог бы использовать плагин. Но приложение B использует только 2 модуля, я хочу загрузить только эти два. –

+0

При использовании плагина вам не нужно «загружать каждый модуль». –

ответ

1

Я отвечаю на вопрос, как описано в комментариях выше.

Если у вас есть пакет npm, вы можете просто потребовать от него ресурсы с помощью элемента require. Этот пакет npm может упаковывать себя как плагин, и вы просто не загружаете его таким образом, поскольку хотите только подмножество материала, который он предоставляет.

Я создал набор типовых проектов, которые показывают это от: https://github.com/AshleyGrant/sample-app-so41961759

Это приложение имеет зависимость от https://github.com/AshleyGrant/sample-resources-so41961759/

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

Это то, что это выглядит как в приложении, когда я тяну в ресурсе внутри зависимости:

<template> 
    <require from="sample-resources-so41961759/custom-elements/my-echo"></require> 
    <h1>${message}</h1> 

    <my-echo say="Echo!"></my-echo> 
</template> 
+0

Хорошо, но я должен создать любой новый репозиторий для каждого модуля, так что. Я планировал поместить все их в один репозиторий ... –

+0

В репозитории, который я разместил, есть два ресурса. Вы можете разместить столько ресурсов, сколько захотите в репо. –

+0

Хорошо, но если моему приложению требуется только «MyEcho», я загружу плагин, который добавит 'MyShow' тоже в событие поставщика, если я его не использую. И если я не хочу, чтобы мои ресурсы были глобальными? Если я хочу потребовать/импортировать их из относительного пути из имени пакета, например 'sample-resources-so41961759/custom-elements/my-echo'? –