2015-09-27 2 views
5

У меня есть интерфейсный SPA с использованием RequireJS (2.1.14) в качестве модульной системы. Это в основном бутстрап и загрузка Backbone.Marionette приложение.Как получить доступ к модулю node.js в среде RequireJS (AMD)?

В main.js:

require.config ({ 
    baseUrl: '/js', 
    waitSeconds: 200, 
    nodeRequire: require, 
    paths: { 
    jquery: '//cdn/jquery.min',   
    underscore:'//cdn/underscore-min', 
    // more plugins 
    }, 
    shim: { 
     // shimming stuff 
    } 
}); 

require(['marionette', 
    'vent', 
    'config/template', 
    'app', 
    'routers/main' 
    ], 
function (Marionette, 
     vent, 
     Template, 
     nrtApp 
) { 
'use strict'; 

nrtApp.module ('Public.Main', function (Main, nrtApp, Backbone,Marionette, $, _) { 
    nrtApp.start(); 

    // this is where the error is: 
    requirejs (['config'], function (config) { 
    if (typeof config !== 'undefined') {config.log ('ok!');} 
    }); 

}); 

}); 

вопрос, я хотел бы загрузить некоторые npm пакетов (например НОЙ установку конфигурации) от RequireJS модуля. RequireJS не может найти npm node_modules каталог, который находится в разных каталогах, чем RequireJS baseUrl.

Ниже моя структура каталогов:

my_project/ 
    app/ 
     public/ 
      js/ 
       main.js 
       app.js 
    node_modules/ 
     config/ 

Ниже сообщение об ошибке:

script error

Он пытался загрузить модуль из каталога BaseUrl.

Как я могу получить доступ к модулю npm из модуля модулей RequireJS в моем случае использования?

+0

От клиента вы можете получить доступ только к общей папке. Что такое config в node_modules? Если этот модуль также работает с клиентом, тогда вам нужно будет его скопировать в public/js, чтобы использовать его. – Molda

+0

@Molda config - модуль npm. Да, я бы хотел использовать config в клиентском приложении. –

ответ

6

Это не представляется возможным использовать RequireJS на клиенте (браузер), чтобы получить доступ к файлам из node_modules. файлов под node_modules сначала необходимо скопировать в папку, которая доступна (в папке public) до того, как клиент может получить доступ к ним. В документации указано RequireJS can access Node modules, но это работает только для на стороне сервера JavaScript (если вы хотите использовать синтаксис модуля RequireJS в узле).

Чтобы использовать модуль config в клиентском приложении, вы должны сначала преобразовать его в совместимый с RequireJS модуль и скопировать его под public. Эта статья explains how to automate this with package managers and build tools и содержит цитату, которая, наконец, неподвижную мое разбитое понимание RequireJS + Node:

Для того, чтобы использовать узловые модули браузера вы будете нуждаться в сборки инструмент. Это может вас беспокоить. Если это прерыватель транзакции, то все означает, что вы продолжаете тратить свою жизнь на копирование и вставку кода и , упорядочивая ваши теги скриптов.

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