制作musicjson包所需的基本requirejs概念

时间:2014-01-03 11:08:29

标签: javascript requirejs xmldom

我想使用有助于将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([])*

非常感谢您的关注。

2 个答案:

答案 0 :(得分:0)

因此,这不是一个RequireJS问题本身。您要使用的包是Node.js包。它旨在在节点(JavaScript的服务器/桌面执行环境)中运行。它不能/不会在浏览器的网页中运行。

它尝试使用的软件包(特别是fs)提供对系统资源(如文件系统)的访问。 Node将这些包作为其核心库的一部分提供给在节点中运行的任何包。浏览器是出于安全原因而专门设计的,从不允许直接访问此类资源到浏览器中运行的任何代码,因为谁知道它来自哪里或可能尝试做什么。

答案 1 :(得分:0)

我自己并没有真正尝试这样做,但browserify(requirejs的替代方案)声称它允许您在应用程序中使用任何节点包。

如果musicjson是您的应用程序应该实现的目标的核心,而且需要js是实现目标的一小步,那么您可以尝试使用browserify运气。