我有一个使用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/
以下是错误消息:
它试图从baseUrl目录加载模块。
如何在我的用例中从RequireJS模块系统访问npm模块?
答案 0 :(得分:7)
无法在客户端(浏览器)上使用RequireJS访问node_modules.
中的文件node_modules
下的文件必须先复制到可访问的位置(在客户端可以访问它们之前的public
文件夹下)。文档说RequireJS can access Node modules,但这仅适用于服务器端 JavaScript(当您想在Node中使用RequireJS样式的模块语法时)。
要在客户端应用中使用config
模块,您必须先将其转换为与RequireJS兼容的模块,然后将其复制到public
下。本文{{3并且包含最终修复了我对RequireJS + Node的理解的引用:
要在浏览器上使用节点模块,您需要构建 工具。这可能会打扰你。如果这是一个交易破坏者,那么所有人 意味着继续浪费你的生命复制和粘贴代码和 安排你的脚本标签。