我按照文档将常量放入了
lib/constants.js
文件中。
问题:
如何在客户端的html和js文件中访问这些常量?lib/constants.js
文件中。
问题:
如何在客户端的html和js文件中访问这些常量?var myVar
会进入全局Node上下文,但是在Meteor中它会保持在文件中(这使得编写更透明的代码非常有用)。Meteor将包装所有文件在IIFE中,将变量封装在该函数中,因此有效地封装在文件中。var
/let
/const
关键字,Meteor会负责导出它。您必须通过相同的机制创建函数(myFunc = function myFunc() {}
或myFunc = () => {}
)。如果代码位于client
目录中,则此导出将是客户端导出;如果代码位于server
目录中,则此导出将是服务器端导出;如果代码位于某些不那么特殊的directories中,则此导出将是客户端和服务器端都有的。main.
开头的文件最后加载lib/
目录中的文件会在其它文件之前加载如果您试图立即访问此全局变量,但Meteor尚未对定义该变量的文件进行实例化,则可能会遇到服务器端问题。因此,您必须处理文件和文件夹名称,或者尝试欺骗Meteor.startup()
(祝您好运)。这意味着代码不易阅读、易受损坏并且依赖位置。如果您的同事移动了一个文件,您的应用程序就会出现错误。
或者,您可能只是不想每次添加一个文件时都要返回文档,然后运行五步流程来确定放置该文件的位置以及如何命名该文件。
从Meteor 1.3开始,有两种解决此问题的方法:
modules
包(meteor add modules
或api.use('modules')
)在应用程序中使用modules。模块可以大有作为,这里是一个简单的例子,直接从上面的链接中提取出来:文件:a.js
(按传统加载顺序首先加载):"import {bThing} from './b.js';
// bThing is now usable here
文件:b.js
(按传统的加载顺序规则第二个加载):
export const bThing = 'my constant';
meteor create --package global_constants
var
关键字的都会被导出到整个包中。这意味着你可以在它们自己的文件中创建变量,使用api.addFiles
精细控制加载顺序,控制它们是否应该在客户端、服务器或两者上运行。它还允许您在其他包中api.use
这些变量。api.addFiles
。meteor add
在多个应用程序中使用它们。
export
和任意多行 import
,而不需要整个包的创建流程,但是也不像包那样可以完全避免愚蠢的错误(如忘记在文件顶部写 import
行)。如果要写大型项目或因为它出现错误(如误写了 import
),最好先使用模块,然后再转到包。为了让其他文件看到它们,你需要将它们设为全局变量。
/lib/constants.js
THE_ANSWER = 42; // note the lack of var
/client/some-other-file.js
console.log(THE_ANSWER);
/lib/constants.coffee
@THE_ANSWER = 42
/client/some-other-file.coffee
console.log THE_ANSWER
Meteor.startup()
回调函数,Meteor也会说应用程序出错,因为未定义SOME_GLOBAL_VARIABLE
... 当在发布中访问它时一切都正常(因为由客户端触发),但在另一个文件中立即调用它则完全不起作用。所以最后我做了一个包! - Kyllvar
关键字,由于我在JavaScript文件顶部使用了"use strict";
,所以会出现未定义错误(我认为这是必要的)。查看这个线程对我有很大帮助 https://github.com/meteor/meteor/issues/1380 - Precastic