Javascript 如何访问Meteor中lib/constants.js文件中的常量?
我按照文档将常量放入Javascript 如何访问Meteor中lib/constants.js文件中的常量?,javascript,meteor,ecmascript-6,constants,Javascript,Meteor,Ecmascript 6,Constants,我按照文档将常量放入lib/constants.js文件中 问题: 如何在我的客户端html和js文件中访问这些常量?您需要将它们设置为全局变量,以便其他文件可以看到它们 JavaScript /lib/constants.js /client/some-other-file.js 咖啡脚本 /lib/constants.coffee /client/some-other-file.coffee Meteor中的变量在文件范围内。 通常情况下,var myVar会放在全局节点上下文中,但是在M
lib/constants.js
文件中
问题:
如何在我的客户端html和js文件中访问这些常量?您需要将它们设置为全局变量,以便其他文件可以看到它们 JavaScript /lib/constants.js /client/some-other-file.js
咖啡脚本 /lib/constants.coffee /client/some-other-file.coffee
Meteor中的变量在文件范围内。
通常情况下,
var myVar
会放在全局节点上下文中,但是在Meteor中它会被封装在文件中(这使得编写更透明的代码非常有用)。Meteor会将所有文件包装在一个函数中,限定该函数中的变量范围,从而有效地将其保存在文件中
要定义一个全局变量,只需删除var
/let
/const
关键字,Meteor就会注意导出它。您必须通过相同的机制创建函数(myFunc=function myFunc(){}
或myFunc=()=>{}
)。如果代码位于client
目录中,则此导出将是客户端的;如果代码位于server
目录中,则此导出将是服务器端的;如果代码位于其他不太特殊的目录中,则此导出将是服务器端的。别忘了:
main.
开头的文件最后加载lib/
目录中的文件或者,您可能只是不想每次添加文件时都必须返回文档,以运行五步流程来了解该文件的放置位置和命名方式 从Meteor 1.3开始,该问题有两种解决方案: 1.ES6模块 Meteor 1.3(目前处于测试阶段)允许您通过使用
模块包(Meteor添加模块或api.use('modules')
)在应用程序中使用
模块有很长的路要走,下面是一个直接从上面链接获取的简单示例:
文件:a.js
(使用传统的加载顺序规则首先加载):
文件:b.js
(使用传统加载顺序规则第二次加载):
Meteor 1.3将在a.js
之前加载b.js
文件,因为它已经被明确告知了这一点
2.包装
声明全局变量的最后一个选项是创建一个包
meteor create --package global_constants
未使用var
关键字声明的每个变量将导出到整个包中。这意味着您可以在自己的文件中创建变量,精细地调整加载顺序,控制它们是否应该转到客户端、服务器或两者。它还允许您在其他包中添加这些变量。
这意味着清晰、可重用的代码。是否要添加常量?可以在已经创建的文件中执行此操作,也可以创建一个并api.addFiles
it
您可以阅读有关包管理的更多信息
以下是一段引自:
这[使用包]是代码分离、模块化和可重用性的终极目标。如果将每个功能的代码放在单独的包中,则一个功能的代码将无法访问其他功能的代码,除非通过导出,从而使每个依赖项都显式。这还允许对功能进行最简单的独立测试。您还可以使用meteor add
发布软件包并在多个应用程序中使用它们
将这两种方法与Meteor 1.3结合在一起真是太神奇了。模块比软件包更容易编写,也更轻,因为使用模块只需一行export
和所需的多行import
s,而不是整个软件包创建过程,但不像软件包那样简单(忘记编写文件顶部的import
行)
一个好办法是首先使用模块,然后在他们写累了或者因为写累了而发生错误时(误写了导入的,…)立即切换到包。
如果您要做的事情比a更大,请确保避免依赖传统的加载顺序。回答得好!我投票支持David的You,因为在/lib目录中添加一个常量文件将在加载其他文件之前加载它。这也是我最初的想法,但在构建应用程序时出现了一些问题。即使当我将全局变量放入(root)/lib文件夹时,无论是否有Meteor.startup()
回调,Meteor都说应用程序有错误,因为没有定义某些全局变量
。。。例如,在出版物中访问它时,一切都正常(因为这是由客户端触发的),但在另一个文件中立即调用它根本不起作用。所以我最后做了一个包裹!正在努力解决相同的问题,但发现一旦我删除var
关键字,就会出现未定义的错误,因为我使用的是“use strict”代码>在我的JavaScript文件的顶部(我认为这是必要的)。查看此线程后,我清楚了很多,为全局命名很有帮助:
console.log(THE_ANSWER);
@THE_ANSWER = 42
console.log THE_ANSWER
import {bThing} from './b.js';
// bThing is now usable here
export const bThing = 'my constant';
meteor create --package global_constants