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

Che*_*Onn 7 javascript node.js requirejs

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

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

});

});
Run Code Online (Sandbox Code Playgroud)

问题是,我想npmRequireJS模块加载一些软件包(例如npm install config). RequireJS似乎找不到node_modules位于目录下不同目录的npm RequireJS baseUrl目录.

以下是我的目录结构:

my_project/
    app/
        public/
            js/
                main.js
                app.js
    node_modules/
        config/
Run Code Online (Sandbox Code Playgroud)

以下是错误消息:

脚本错误

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

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

Lef*_*ium 7

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

config在客户端应用程序中使用您的模块,您必须先将其转换为RequireJS兼容模块并将其复制下来public.本文解释了如何使用包管理器和构建工具自动执行此操作,并包含最终修复了我对RequireJS + Node的理解的引用:

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