Загрузка компонентов в библиотеку
Closed this issue · 3 comments
Привет.
Я хочу сделать библиотеку с иконками. И вот, похоже, я наткнулся на проблему. Дерби позволяет грузить либо всю библиотеку целиком, либо создавать отдельный компонент для каждой иконки.
Здесь видно, как Натан вручную прописел каждый компонент. Мне бы хотелось сделать что-то типа:
icons.forEach(function(icon) {
app.component(require( "./icons/" + icon));
});
На сервере это работает, а на клиенте дает ошибку Error: Cannot find module './icons/air'
.
Как бы мне так сделать так, чтобы при подключении библиотеки я мог указывать какие именно иконки попадут в бандл? Оверхед больно уж велик...
В лоб никак, browserify не может в бандл их автоматом засунуть, потому что он не исполняет код при создании бандла, а статически ищет в файлах функцию require со строковым аргументом.
Единственный workaround, который мне приходит в голову, это на серваке в эвент-хэндлере создания бандла expose'ить через browserify.require() нужные файлы, зафорсив таким образом их попадание в бандл.
Так, если модуль называется my-icons
, то выглядеть это будет примерно так:
# icons.coffee
module.exports = ['home', 'back', 'forward']
# server/index.coffee
store.on 'bundle', (b) ->
require('../icons').forEach (icon) ->
b.require 'my-icons/' + icon
# app/index.coffee
require('../icons').forEach (icon) ->
app.component require 'my-icons/' + icon
Павел, спасибо.
Идея понятна. Можно еще создавать спрайт или же руками прописыватьrequire
Вот драфт библиотеки с иконками.
Вообщем попробую ее подключить к проекту и найти подходящий вариант использования.
Думаю я объеденю ветки и сделаю в итоге возможными оба подхода и спрайт и свг в коде. Обычно в проекте иконок с деяток не более, нет резона грузить все 250 в спрайт. А для экспериментов же спрайт удобен.