将Dart API导出到JavaScript,而不使用Dart VM
我想在没有Dart虚拟机的浏览器上将Dart API导出为JavaScript。例如,对于a类:将Dart API导出到JavaScript,而不使用Dart VM,dart,dart-js-interop,Dart,Dart Js Interop,我想在没有Dart虚拟机的浏览器上将Dart API导出为JavaScript。例如,对于a类: A类{ 字符串名; A(); A.使用名称(此名称); } 我想使用导出的API创建一个JavaScript对象,包括: var a=newa(); 我的问题的答案指向js interop 然而,当我完成任务时,我无法得到预期的结果。我的Dart库似乎没有被导出到JavaScript中 公共规范yaml: name:interop 说明:> 用于应用程序或在pub.dartlang.org上共享
A类{
字符串名;
A();
A.使用名称(此名称);
}
我想使用导出的API创建一个JavaScript对象,包括:
var a=newa();
我的问题的答案指向js interop
然而,当我完成任务时,我无法得到预期的结果。我的Dart库似乎没有被导出到JavaScript中
公共规范yaml:
name:interop
说明:>
用于应用程序或在pub.dartlang.org上共享的库。
版本:0.0.1
开发依赖项:
单元测试:任何
依赖项:
js:
吉特:
网址:git://github.com/dart-lang/js-interop.git
变压器:
-js
-js/初始值设定项
示例/main.dart
图书馆主图书馆:
import 'package:js/js.dart';
main() {
initializeJavaScript();
}
lib/a.dart
库a;
导入“package:js/js.dart”;
@出口()
甲级{
字符串名;
A();
A.使用名称(此名称);
}
index.html
(不清楚最后一个脚本标记的src属性应该指向哪里。我也尝试过使用/example/main.dart,这不会改变我的结果。)
我希望能够在编译(工具->发布构建)和加载index.html后打开控制台,然后执行以下操作:
var a=new dart.a.a();
然而,我得到的却是:“无法读取未定义的属性‘A’”。换句话说,dart.a
是未定义的
index.html中包含原始Dart脚本表明js interop适用于带有Dart VM的浏览器。我试着在Dartium上运行index.html,结果也一样
我缺少什么?脚本标记的
src
属性仍然必须指向包含main()
方法的Dart脚本文件。当应用程序使用pub build构建为JavaScript时,Dart将编译为JavaScript,并且可以在没有Dart VM的浏览器中运行。是的,它在仅JavaScript的浏览器上运行。事实证明,文档并没有给出所有的步骤。以下是对我有用的东西,从一个新项目开始
使用(文件->新建项目/包)创建名为“jsout”的新包项目。删除以下文件:
test/all\u test.dart
example/jsout.dart
编辑这些文件:
公共规范yaml
name:jsout
说明:>
用于应用程序或在pub.dartlang.org上共享的库。
版本:0.0.1
开发依赖项:
单元测试:任何
依赖项:
js:
吉特:
网址:git://github.com/dart-lang/js-interop.git
变压器:
-js
-js/初始值设定项
lib/main.dart
主体部分;
@出口()
甲级{
字符串名;
A();
A.使用名称(此名称);
谈话{
印刷品(姓名);
}
}
创建文件夹web
,并添加以下文件:
web/main.dart
librarymain;
导入“package:js/js.dart”;
部分“../lib/jsout.dart”;
main(){
初始化javascript();
}
web/index.html
更新这些文件后,加载index.html并打开控制台:
var a=new dart.main.a.withName('foo');
a、 talk();//返回“foo”
本程序自修订之日起生效。谢谢,很高兴知道。考虑到这一点,关于我的设置哪里出了问题,有什么想法吗?我还没有使用这个软件包,但我知道您需要运行pub build
从Dart和main.Dart
文件获取JavaScript,src
文件指向的build
目录中不能有。运行pub build
时,将清除build
目录。main.dart
文件应该在web
目录中,src
属性应该是src=“main.dart
谢谢你的提示。我添加了一个“web”目录并将index.html移到那里。编辑过的src指向“main.dart”。我可以“运行”“index.html,服务器启动。然而,问题仍然存在。加载页面后,dart.a未定义。页面上没有出现错误,当我加载页面时,许多dart文件被加载,dart编辑器中的“工具输出”证明了这一点。多亏了您的回答,我才能够找到问题的解决方案,为什么您将main.dart.js'作为脚本源。你甚至没有这样的档案。我想您应该在这里引用
main.dart`文件<当从不支持Dart的浏览器加载时,code>pub build
或pub serve
应该可以在运行时替换此功能。这种方法在运行Dartium时有效,但在运行Chrome时无效。在后一种情况下,在运行构造函数时引发了一个错误。使用javascript文件时,该错误消失。当您从build/web
加载由pub build
生成的index.html
时?你能发布错误消息吗?您是否使用pub-serve
(或从窗帘后使用pub-serve
的DartEditor启动)。functionmain.dart\u initialize.js:36 Uncaught TypeError:undefined不是函数此错误是在dart Editor中index.html文件上的command-R之后收到的。它启动了一个服务器实例和Dartium。在dartium中尝试之后,我在Chrome中加载了相同的URL localhost:8081/index.html,打开控制台并尝试用名称('foo')实例化dart.jsout.A.withName代码>非常错误;-)您不能从顶级文件夹中退出,如web
,bin
,lib
。。。从另一个顶级文件夹导入。您只能使用import'package:jsout/jsout.dart'格式从当前顶级文件夹或lib
导入文件代码>