如何访问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工具。 这可能会打扰你。 如果这是一个交易断路器,那么通过一切手段继续浪费你的生活复制和粘贴代码,并安排你的脚本标签。