dart - 从 Javascript 调用 Dart ......这是一个错误吗?
问题描述
在编译以下漂亮的代码时...
@JS()
library nodejs;
import 'package:js/js.dart';
@JS()
class Exports {
external set functionName(Function function);
}
@JS()
external Exports get exports;
void _someDartFunction(dynamic s) {
print('Hello from Dirt!');
}
void main(List<String> arguments) {
exports.functionName = allowInterop(_someDartFunction);
}
...使用 dart2js 命令从 dart 到 js,如下所示:
dart2js -o node_modules/nodejs/index.js bin/main.dart
结节被称为“nodejs”(在这种情况下,名称不是问题!)。该模块之前由 npm 使用适当的 package.json 初始化。
然后我启动 nodejs 并需要模块
$ nodejs
> var n = require("nodejs")
ReferenceError: self is not defined
at Object.main (/home/buergerling/Schreibtisch/dart/nodejs1/node_modules/njs/index.js:2544:28)
at /home/buergerling/Schreibtisch/dart/nodejs1/node_modules/njs/index.js:3569:9
at init.currentScript (/home/buergerling/Schreibtisch/dart/nodejs1/node_modules/njs/index.js:3549:7)
at dartProgram (/home/buergerling/Schreibtisch/dart/nodejs1/node_modules/njs/index.js:3564:5)
收到错误。这个问题可以通过self
从编译的 index.js 文件中取消来解决。
问题可以在这里发现:
...
main: function($arguments) {
var t1 = type$.Function;
J.set$functionName$x(self.exports, P.allowInterop(D.main___someDartFunction$closure(), t1));
J.set$functionName$x(self.module.exports, P.allowInterop(D.main___someDartFunction$closure(), t1));
self.functionName = P.allowInterop(D.main___someDartFunction$closure(), t1);
P.print("Hello from Dirt!");
},
Exports: function Exports() {
}
...
更改self.exports
为exports
解决问题,模块可以按预期加载和使用。
有没有比手动编辑编译文件更优雅的解决方案?
解决方案
推荐阅读
- r - Data.Frame 中每一行的样本随机列
- python-3.x - 模块化有问题,无法让我的程序正确运行
- javascript - Flow 将导入的类型视为任何类型
- r - 我创建了一个包含 for 循环内部和 return() 函数的 R 函数,但它没有生成正确的结果
- python-3.x - python3中的正则表达式预搜索模式
- javascript - 处理单词标记时如何解决 ƒ Object() { [native code] } 错误?
- python - python中的int列表有问题
- python-3.x - 如何在不平衡数据的二元分类问题中选择正确的神经网络?
- excel - 如果 F 列包含字符串,则在 E 列中返回字符串
- reactjs - 将 0 视为未输入并将错误视为必填字段的反应