2015-09-27 49 views
5

我有一个使用RequireJS(2.1.14)作为模块系统的前端SPA。它基本上引导并加载Backbone.Marionette应用程序。如何访问RequireJS(AMD)环境中的node.js模块?

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包(例如NPM安装配置)从RequireJS模块。 RequireJS似乎无法找到位于与RequireJS baseUrl目录不同目录的npm node_modules目录。

下面是我的目录结构:

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

下面是错误消息:

script error

它试图从目录中的baseUrl加载模块。

如何在我的用例中从RequireJS模块系统访问npm模块?

+0

从客户端只能访问公用文件夹。 node_modules中的配置是什么?如果该模块也在客户端上工作,那么您必须将其复制到public/js中才能使用它。 – Molda

+0

@Molda config是一个npm模块。是的,我想在客户端应用程序中使用配置。 –

回答

6

这是不可能使用客户端(浏览器)上RequireJS从node_modules.文件访问文件node_modules下必须首先被复制到可访问(在public文件夹下)之前在客户端可以访问它们的位置。该文档说RequireJS can access Node modules,但这只适用于服务器端 JavaScript(当您要在Node中使用RequireJS风格的模块语法时)。

要在客户端应用程序中使用config模块,必须先将其转换为RequireJS兼容模块并将其复制到public下。本文explains how to automate this with package managers and build tools,并包含最终确定我RequireJS +节点的破认识报价:

为了使用上的浏览器节点模块,您将需要一个构建 工具。这可能会打扰你。如果这是一个交易断路器,那么所有的 意味着继续浪费你的生活复制和粘贴代码和 排列你的脚本标签。

相关问题