2015-09-27 10 views
5

Ich habe ein Frontend-SPA mit RequireJS (2.1.14) als Modulsystem. Es im Grunde Bootstrap und laden Backbone.Marionette App.Zugriff auf das Modul node.js in der RequireJS (AMD) -Umgebung?

In 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!');} 
    }); 

}); 

}); 

Die Frage ist, würde ich einige npm Pakete wie laden (z npm Config installieren) aus RequireJS Modul. RequireJS kann nicht scheinen, npm node_modules Verzeichnis zu finden, das in einem anderen Verzeichnis als RequireJS baseUrl Verzeichnis sitzt.

Unten ist meine Verzeichnisstruktur:

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

Im Folgenden finden Sie Fehlermeldung:

script error

Es versuchte Modul aus baseUrl Verzeichnis zu laden.

Wie kann ich auf Npm-Modul von RequireJS-Modul-System in meinem Anwendungsfall zugreifen?

+0

Vom Client aus können Sie nur auf öffentliche Ordner zugreifen. Was ist die Konfiguration in node_modules? Wenn das Modul auch auf dem Client funktioniert, musst du es in public/js kopieren, um es zu benutzen. – Molda

+0

@Molda config ist ein npm-Modul. Ja, ich möchte Config auch in der Client-App verwenden. –

Antwort

6

Es ist nicht möglich RequireJS auf dem Client (Browser) zu verwenden, um Dateien für den Zugriff von node_modules. Dateien unter node_modules muß zuerst an einen Ort kopiert werden, die zugänglich ist (unter dem public Ordner), bevor der Client auf sie zugreifen kann. Die Dokumentation sagt RequireJS can access Node modules, aber das funktioniert nur für serverseitige JavaScript (wenn Sie RequireJS-Stil Modul Syntax in Node verwenden möchten).

Um Ihr config-Modul in der Client-App zu verwenden, müssen Sie es zuerst in ein RequireJS-kompatibles Modul umwandeln und es unter public kopieren. Dieser Artikel explains how to automate this with package managers and build tools und enthält das Zitat, das schließlich mein gebrochenes Verständnis RequireJS + Knoten festgelegt:

Um zu verwenden Knotenmodule auf dem Browser werden Sie einen Build Werkzeug benötigen. Das könnte Sie stören. Wenn dies ein Deal Breaker ist, dann bedeutet weiter verschwenden Sie Ihr Leben Kopieren und Einfügen von Code und Anordnung Ihrer Skript-Tags.

Verwandte Themen