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

我有一个使用RequireJS (2.1.14)作为模块系统的前端SPA。 它基本上引导和加载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!');} }); }); }); 

问题是,我想从RequireJS模块加载一些npm包(例如npm install config)。 RequireJS似乎无法find与RequireJS baseUrl node_modules目录不同的目录下的npm node_modules目录

以下是我的目录结构:

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

以下是错误信息:

脚本错误

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

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

在客户端(浏览器)上使用RequireJS来访问node_modules.文件是node_modules. 在客户端可以访问它们之前,必须先将node_modules下的文件复制到可访问的位置(在公用文件夹下)。 文档说RequireJS可以访问Node模块 ,但是这只适用于服务器端 JavaScript(当你想在Node中使用RequireJS风格的模块语法时)。

要在客户端应用程序中使用您的config模块,您必须首先将其转换为RequireJS兼容模块并将其复制到public下。 本文解释了如何使用包pipe理器和构build工具自动执行此操作 ,并且包含最终解决了对RequireJS + Node的破坏理解的引用:

为了在浏览器上使用节点模块,您将需要一个构build工具。 这可能会打扰你。 如果这是一个交易断路器,那么通过一切手段继续浪费你的生活复制和粘贴代码,并安排你的脚本标签。