Javascript 未捕获错误:模块名称";aaa“bbb”1“U pb”;尚未加载上下文:\的。使用require([])

Javascript 未捕获错误:模块名称";aaa“bbb”1“U pb”;尚未加载上下文:\的。使用require([]),javascript,node.js,requirejs,node-modules,Javascript,Node.js,Requirejs,Node Modules,我试图使用require加载protobufjs文件,但在控制台上出现以下异常 02-21 11:18:06.445 9130-9130/com.p.protoextensiontest I/chromium: [INFO:CONSOLE(5)] "Uncaught Error: Module name "js/proto/data_main_1_pb" has not been loaded yet for context: _. Use require([]) http://requirej

我试图使用require加载protobufjs文件,但在控制台上出现以下异常

02-21 11:18:06.445 9130-9130/com.p.protoextensiontest I/chromium: [INFO:CONSOLE(5)] "Uncaught Error: Module name "js/proto/data_main_1_pb" has not been loaded yet for context: _. Use require([])
http://requirejs.org/docs/errors.html#notloaded", source: file:///android_asset/www/js/require.js (5)
"Uncaught Error: Mismatched anonymous define() module: function p(){   
这是我的index.js代码

var proto = require('js/proto/aaa_bbb_1_pb');

function onCreate(){
    console.log("in onCreate");
    parseProto();
}
function parseProto(){
    var name = proto.person.personName;
}
这是我的index.html

<head>
    <title> Testing proto extension</title>
    <script src="js/require.js"></script>
    <script src="js/google-protobuf.js"></script>
    <script src="js/index.js"></script>

</head>
<body>
    <button type="button"  onclick="onCreate()"> Create Data</button> <br/> 
</body>

测试原型扩展
创建数据

我是javascript和node.js的新手。请提供任何参考资料

index.js
中显示的模块采用CommonJS格式。它没有包装器,使
require
调用包含单个字符串参数

但是,您正在使用RequireJS加载它。RequireJS是AMD模块加载器,而不是CommonJS模块加载器。您不必完全重写
require
调用以使用AMD格式(带有一系列依赖项和回调的
require
调用),但您必须至少将模块代码包装在
define
调用中,如下所示:

define(function (require) {
  var proto = require('js/proto/aaa_bbb_1_pb');

  function onCreate(){
      console.log("in onCreate");
      parseProto();
  }

  function parseProto(){
      var name = proto.person.personName;
  }
}


请注意,
onclick=onCreate()
仍然无法工作。使用模块的目标之一是避免将所有内容都放在全局空间中。因此,
onCreate
无法访问
onclick
。使其可访问的最小方法是在定义函数后添加
window.onCreate=onCreate
,但我不建议这样做。您应该添加一个导出函数,可以在初始化时使用button对象调用该函数,该函数将调用
addEventListener(“单击”,onCreate)
,或者模块可以在页面上搜索特定元素(通过ID、类名等),并调用
addEventListener(“单击”,onCreate)

您在
index.js
中显示的模块采用CommonJS格式。它没有包装器,使
require
调用包含单个字符串参数

但是,您正在使用RequireJS加载它。RequireJS是AMD模块加载器,而不是CommonJS模块加载器。您不必完全重写
require
调用以使用AMD格式(带有一系列依赖项和回调的
require
调用),但您必须至少将模块代码包装在
define
调用中,如下所示:

define(function (require) {
  var proto = require('js/proto/aaa_bbb_1_pb');

  function onCreate(){
      console.log("in onCreate");
      parseProto();
  }

  function parseProto(){
      var name = proto.person.personName;
  }
}

请注意,
onclick=onCreate()
仍然无法工作。使用模块的目标之一是避免将所有内容都放在全局空间中。因此,
onCreate
无法访问
onclick
。使其可访问的最小方法是在定义函数后添加
window.onCreate=onCreate
,但我不建议这样做。您应该添加一个导出函数,可以在初始化时使用button对象调用该函数,该函数将调用
addEventListener(“单击”,onCreate)
,或者模块可以搜索页面上的特定元素(通过ID、类名等),并调用
addEventListener(“单击”,onCreate)