yandex / mapsapi-modules

Async modular system
132 stars 29 forks source link

Сравнение с AMD (require.js, webpack) #47

Closed DimitryDushkin closed 8 years ago

DimitryDushkin commented 9 years ago

Просьба описать use case, когда необходимы асинхронный provide и возможность передекларации модулей. Пока непонятно, зачем эти возможности нужны и чем это решение лучше require.js или webpack.

qfox commented 9 years ago

http://habrahabr.ru/post/181536/ — тут в комментах интересные тезисы http://habrahabr.ru/post/213627/ — здесь примеры

DimitryDushkin commented 9 years ago

Понял, спасибо) может это стоит вынести в readme? А то библиотека вроде как базовая для bem, вводит еще один велосипед, а обоснования велосипеду нет.

qfox commented 9 years ago

Хотелось бы, чтобы велосипеда не было, на самом деле. Но чуваки в AMD любят либо все грузить синхронно, либо уносить эту логику в приложение ;-( Либо тупо не понимают, о чем речь идет, занимаясь домашними страничками и разработкой под них стандартов.

DimitryDushkin commented 9 years ago

В AMD есть возможность грузить асинхронно в связке с webpack, например, — http://webpack.github.io/docs/code-splitting.html#require-ensure.

А что команда AMD "тупо не понимают"?

jifeon commented 8 years ago

@zxqfox Как правильно подключить lodash.once например? он зависит от lodash.before, сборки есть только для AMD, CommonJS и es6 модулей. Весь lodash мне не нужен.

qfox commented 8 years ago

В AMD есть возможность грузить асинхронно в связке с webpack, например.

@DimitryDushkin Это замусоривает код, имхо. И команде AMD это ок, судя по всему.

Как правильно подключить lodash.once например? он зависит от lodash.before, сборки есть только для AMD

@jifeon Если у них уже есть реализации es6, то можно из них собрать ym. См. https://github.com/bem/babel-plugin-bem/issues/3 и сам проект.

Есть еще https://github.com/bem/bem-core/issues/1109 про es6

jifeon commented 8 years ago

@zxqfox ok спасибо. Вообще конкретно lodash позволяет делать кастомные сборки

Оставлю это здесь, вдруг кому пригодится:

#!/usr/bin/env bash

# specify here all the lodash modules you need, separate them by comma
include_modules=once,isPlainObject

# the path we age going to install lodash to
lodash_dir=desktop.blocks/lodash
lodash_path=${lodash_dir}/lodash.js

template='modules.define("lodash", function(provide) {%output% provide(lodash);});'
./node_modules/.bin/lodash include=${include_modules} exports=none iife="${template}" -d -o ${lodash_path} && \
echo "lodash installed successfully";