2012-03-05 1 views
14

В настоящее время я работаю над большим проектом JavaScript, для которого мы хотим определить наш собственный API. Я использую RequireJS в качестве загрузчика зависимостей, и он подходит мне просто отлично, позволяя мне определять модули в соответствующем файле. Я не использовать мои собственное пространство имен, модуль возвращает экземпляр, который может быть использован в других модулях, то есть:Как структурировать проект JavaScript с использованием RequireJS

define(
    ['imported_module'], 
    function(module){ 
     module.doSomething(); 
    } 
) 

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

[projectname].[packagename].[ModuleName] 

Примером может быть stackoverflow.util.HashMap.js. Я хотел бы представить папку проекта, папку на упаковку и переименовывать файлы с именем модуля, например:

stackoverflow/util/HashMap.js 

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

Файл

stackoverflow/util/stackoverflow.util.HashMap.js 

должен быть ввозу заявлением

define(['stackoverflow.util.HashMap'],function(HashMap){}); 

кто-нибудь опыт работы с структурировании крупных проектов JavaScript, и если да, то не могли бы вы поделиться своим подходом?

+2

Возможно, вы можете сделать это с помощью настраиваемого плагина ... что-то вроде 'use! Stackoverflow.util.HashMap' – blockhead

+1

Как сказал блокхолд: API-интерфейс плагина имеет функцию« нормализации », которая принимает имя и переводит его в путь , Взгляните на: http://requirejs.org/docs/plugins.html # apinormalize – David

ответ

9

Вы не должны указывать информацию о маршрутизации в именах файлов js, это задание пространства имен и путей к папке. Так что stackoverflow/util/HashMap.js просто отлично. И вы можете использовать define ("stackoverflow/util/HashMap", ....), чтобы рассказать о зависимости.

Если вам нужно поместить ваши модули в разные папки, вы можете настроить пути для своего загрузчика, см. this manual из RequireJS API.

Нет лучшего способа структурирования ваших js-файлов. Но размещение корневого пространства имен в папке src всегда является хорошей практикой. Вы можете увидеть dojo source code и YUI source code и использовать аналогичные способы для своего проекта. Они оба являются крупномасштабными Javascript-проектами.

+0

Спасибо за ваш ответ, я посмотрю на эти источники! Руководство RequireJS рекомендует не использовать именованные зависимости в отношении инструмента оптимизации. – thomaux

2

На самом деле лучше получить js lib routing для загрузки всех js с помощью стандартного интерфейса: «js.yoursite.com/lib-0.2.js» должен быть маршрутизатор (php или другой, и может кэшировать запросы). Таким образом, вы можете определить и контролировать целые шаблоны, которые вы используете. Потому что обычный плагин jquery должен оставаться в одном каталоге, с jquery и ваши собственные собственные плагины.

И вы контролируете каждый проект по его собственным правилам:

jquery/ 
    plugins/ 
    jquery.prettyPhoto.js 
    jquery.min.js 

mySuperJS/ 
    stable.0/ -- there your production version for 1.0 branch 
    module.js 
    0.1/ 
    module.js 
    0.2/ 
    module.js 
    0.3/ 
    module.js 

myOtherlib/ 
    stable.0/ -- production version for all 0.* versions 
    stable.1/ -- production version for all 1.0 versions 
    0.1/ 
    0.2/ 
    0.3/ 
    0.4/ 
    0.4.1/ 
    0.4.1.18/ 

Мы используем такую ​​структуру около года, и это лучше для нас. Но иногда мы используем более сложное решение и разделяем все модули для libs, плагинов, инструментов, компонентов и приложений.

+0

Спасибо за ваше предложение, хотя я боюсь, что такая структура папок не устраивает наш проект. – thomaux

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

  • Нет связанных вопросов^_^