如何在RequireJS(AMD)环境中访问node.js模块?

时间:2015-09-27 14:29:10

标签: javascript node.js requirejs

我有一个使用RequireJS(2.1.14)作为模块系统的前端SPA。它基本上是bootstrap并加载Backbone.Marionette app。

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包(例如npm install config)。 RequireJS似乎找不到位于node_modules目录以外的目录的npm RequireJS baseUrl目录。

以下是我的目录结构:

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

以下是错误消息:

script error

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

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

1 个答案:

答案 0 :(得分:7)

无法在客户端(浏览器)上使用RequireJS访问node_modules. 中的文件node_modules下的文件必须先复制到可访问的位置(在客户端可以访问它们之前的public文件夹下)。文档说RequireJS can access Node modules,但这仅适用于服务器端 JavaScript(当您想在Node中使用RequireJS样式的模块语法时)。

要在客户端应用中使用config模块,您必须先将其转换为与RequireJS兼容的模块,然后将其复制到public下。本文{{3并且包含最终修复了我对RequireJS + Node的理解的引用:

  

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