我想使用有助于将musicXML文件转换为json表示法的musicjson.js包,看看是否可以将导出的musicXML Finale乐谱导入到使用Fermata / VexFlow类的浏览器中。 / p>
https://github.com/saebekassebil/musicjson
问题是这个模块适用于require(要求 像fs这样的节点包我只是在requirejs中的新手...即使我花了很少时间来理解网站上的教程,我仍然没有得到如何解决这种基本问题当我的依赖musicjson.js需要被称为:
var xmldom = require('flat-xmldom'),
fs = require('fs'),
path = require('path'),
util = require('util');
我的index.php页面执行经典的require调用:
<!DOCTYPE html>
<head>
<!-- javascript head -->
<!-- REQUIRE -->
<script data-main="scripts/main" src="bower_components/requirejs/require.js"></script>
</head>
<body>
</body>
</html>
在我的scripts / main.js中,我想简单地从musicjon那里得到它:
var music = require('musicjson');
music.musicJSON(xml, function(err, json) {
// Do something with the MusicJSON data
});
我也在同一个目录scripts /中推出了flat-xmldom文件夹,fs.js,path.js,util.js
当我这样做时,我只是获得了以下经典错误: *错误:尚未为上下文加载模块名称“musicjson”:_。使用require([])*
...这看起来像requirejs网站中引用的常见错误, 但如果我尝试的东西,我想它应该写,我有点迷失,以确定这里的基本概念错误在哪里:
require.config({
baseUrl: '/scripts/',
paths: {
flatxmldom:'./flat-xmldom/__package__',
fs: 'fs',
path:'path',
util:'util',
musicjson: 'musicjson'
}
});
require(['flatxmldom','fs','path','util','musicjson'],function(flatxmldom,fs,path,util,musicjson){})
在这种情况下返回错误,例如: *模块名称“fs”尚未加载上下文:_。使用require([])*
非常感谢您的关注。
答案 0 :(得分:0)
因此,这不是一个RequireJS问题本身。您要使用的包是Node.js包。它旨在在节点(JavaScript的服务器/桌面执行环境)中运行。它不能/不会在浏览器的网页中运行。
它尝试使用的软件包(特别是fs)提供对系统资源(如文件系统)的访问。 Node将这些包作为其核心库的一部分提供给在节点中运行的任何包。浏览器是出于安全原因而专门设计的,从不允许直接访问此类资源到浏览器中运行的任何代码,因为谁知道它来自哪里或可能尝试做什么。
答案 1 :(得分:0)
我自己并没有真正尝试这样做,但browserify(requirejs的替代方案)声称它允许您在应用程序中使用任何节点包。
如果musicjson是您的应用程序应该实现的目标的核心,而且需要js是实现目标的一小步,那么您可以尝试使用browserify运气。