将Dart API导出到JavaScript,而不使用Dart VM

将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上共享

我想在没有Dart虚拟机的浏览器上将Dart API导出为JavaScript。例如,对于a类:

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
导入文件