Meteor+Ionic教程报错:Tracker is not defined
我之前在做Meteor+Ionic项目时也碰到过一模一样的问题,这个错误的核心原因是MeteorObservable.autorun()底层依赖Meteor的Tracker模块,但你的项目环境里Tracker没有被正确加载或导入,导致找不到这个全局变量。下面是几个可以尝试的解决方案:
方案1:显式导入Tracker模块
在你的main.ts文件顶部添加Tracker的导入语句,确保模块被加载:
import 'meteor-client'; import { Tracker } from 'meteor/tracker'; // 新增这行导入 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { MeteorObservable } from 'meteor-rxjs'; import { Meteor } from 'meteor/meteor'; import { AppModule } from './app.module'; Meteor.startup(() => { const subscription = MeteorObservable.autorun().subscribe(() => { if (Meteor.loggingIn()) { return; } setTimeout(() => subscription.unsubscribe()); platformBrowserDynamic().bootstrapModule(AppModule); }); });
方案2:配置meteor-client包含Tracker
检查项目根目录下的meteor-client.config.json文件(如果没有就新建一个),把tracker添加到imports数组中,确保meteor-client打包时包含这个模块:
{ "imports": [ "tracker", "meteor-base", "modules", "es5-shim" ] }
修改完成后,重新执行构建命令(比如ionic build或者meteor run),让配置生效。
方案3:检查版本兼容性
如果上面的方法都没用,可能是meteor-rxjs和meteor-client的版本不匹配。比如Meteor 2.x版本对应的meteor-rxjs建议使用0.4.x系列,你可以在package.json里锁定匹配的版本:
{ "dependencies": { "meteor-rxjs": "^0.4.1", "meteor-client": "^1.4.0" } }
然后执行npm install重新安装依赖。
错误回顾
你遇到的错误信息:
ReferenceError: Tracker is not defined
at autorun (http://localhost:8100/build/vendor.js:178469:13)
at Observable._subscribe (http://localhost:8100/build/vendor.js:178480:27)
at Observable._trySubscribe (http://localhost:8100/build/vendor.js:23023:25)
at Observable.subscribe (http://localhost:8100/build/vendor.js:23011:93)
at http://localhost:8100/build/main.js:57:65
at maybeReady (http://localhost:8100/build/vendor.js:123856:57)
at HTMLDocument.loadingCompleted (http://localhost:8100/build/vendor.js:123868:9)
at t.invokeTask (http://localhost:8100/build/polyfills.js:3:15660)
at r.runTask (http://localhost:8100/build/polyfills.js:3:10834)
at e.invokeTask [as invoke] (http://localhost:8100/build/polyfills.js:3:16794)
这个栈追踪明确指向autorun方法里找不到Tracker,所以只要确保Tracker被正确引入就能解决问题。
内容的提问来源于stack exchange,提问作者Rafael Osuna Dominguez

