2013-03-27 3 views
0

У меня есть библиотека JavaScript с открытым исходным кодом, которая была создана. Недавно вкладчик помог изменить мою библиотеку для поддержки AMD. За последний месяц или два я реорганизовал свою библиотеку для повышения ремонтопригодности, модульности и удобочитаемости. По сути, я извлек фрагменты логики в автономные модули. Однако эти модули находятся внутри основного модуля.Использование RequireJS и AMD для распространения проекта с внутренними зависимостями

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

Я знаю, что RequireJS имеет функцию «оптимизировать», благодаря чему он объединяет все зависимости в один файл и минимизирует его.

Мой вопрос: будет ли этот миниатюрный файл совместим с AMD? То есть будет ли файл отображаться как модуль AMD? Зависимости, которые имеет сам проект, являются внутренними, и я не хочу раскрывать их отдельно. Тем не менее, я все равно хотел бы, чтобы разработчики могли импортировать мою библиотеку в качестве автономного модуля.

ответ

1

будет ли этот миниатюрный файл совместимым с AMD? То есть, будет ли файл отображаться как модуль AMD?

Требование.js не требует создания совместимого с AMD модуля. Вы должны сделать свою библиотеку совместимой с AMD. Это должно произойти в вашем файле main. Вы можете узнать об этом от lowdash, как это сделать. Они создали свою библиотеку, совместимую с Node и Require.js. Они в основном ищут глобальные переменные для обнаружения узла и требования.

/** Detect free variable `exports` */ 
    var freeExports = typeof exports == 'object' && exports; 

    /** Detect free variable `module` */ 
    var freeModule = typeof module == 'object' && module && module.exports == freeExports && module; 

    /** Detect free variable `global` and use it as `window` */ 
    var freeGlobal = typeof global == 'object' && global; 
    if (freeGlobal.global === freeGlobal) { 
    window = freeGlobal; 
    } 

В конце:

// if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { 
    // Expose Lo-Dash to the global object even when an AMD loader is present in 
    // case Lo-Dash was injected by a third-party script and not intended to be 
    // loaded as a module. The global assignment can be reverted in the Lo-Dash 
    // module via its `noConflict()` method. 
    window._ = _; 

    // define as an anonymous module so, through path mapping, it can be 
    // referenced as the "underscore" module 
    define(function() { 
     return _; 
    }); 
    } 
    // check for `exports` after `define` in case a build optimizer adds an `exports` object 
    else if (freeExports && !freeExports.nodeType) { 
    // in Node.js or RingoJS v0.8.0+ 
    if (freeModule) { 
     (freeModule.exports = _)._ = _; 
    } 
    // in Narwhal or RingoJS v0.7.0- 
    else { 
     freeExports._ = _; 
    } 
    } 
    else { 
    // in a browser or Rhino 
    window._ = _; 
    } 
+0

[Вот] (https://raw.github.com/vivin/regula/master/src/regula.js) источник в моей библиотеке. Я считаю, что в настоящее время AMD совместима. Я намерен разделить внутренние модули на отдельные файлы, которые сами по себе совместимы с AMD. Когда я оптимизирую с RequireJS, будет ли полученный миниатюрный файл (который содержит все остальные модули) совместимым с AMD? –

+0

Если вы явно определяете его, да. Совместимость AMD. – Mohsen

+0

потрясающий! Спасибо! –

Смежные вопросы