如何访问Meteor中lib/contents.js文件中的常量

How can I access constants in the lib/constants.js file in Meteor?

本文关键字:contents js 文件 常量 lib 访问 Meteor 何访问      更新时间:2023-09-26

我按照文档将常量放入lib/constants.js文件中。

问题:如何访问客户端htmljs文件中的这些常量?

Meteor中的变量是文件范围的
通常,var myVar会出现在全局Node上下文中,但在Meteor中,它保持在文件中(这使得编写更透明的代码非常有用)。Meteor将把所有文件封装在IIFE中,确定该函数中的变量范围,从而有效地确定文件中的变量。

要定义全局变量,只需删除var/let/const关键字,Meteor就会负责导出它。您必须通过相同的机制(myFunc = function myFunc() {}myFunc = () => {})创建函数。如果代码在client目录中,则此导出将是客户端导出;如果代码在server目录中,此导出将为服务器端导出;或者如果代码在其他一些不太特殊的目录中,将同时导出
不要忘记遵守以下规则:

  1. HTML模板文件总是先于其他文件加载
  2. 最后加载以main.开头的文件
  3. 接下来加载任何lib/目录中的文件
  4. 下一步加载路径更深的文件
  5. 然后按整个路径的字母顺序加载文件

现在,如果您尝试立即访问此全局变量,您可能会在服务器端遇到问题,但Meteor尚未实例化它,因为它尚未运行定义变量的文件。因此,你必须与文件和文件夹名称作斗争,或者可能试图欺骗Meteor.startup()(祝你好运)。这意味着可读性较差、易损坏的位置相关代码。你的一位同事移动了一个文件,你的应用程序就中断了
或者,你可能不想每次添加文件时都要返回文档,以运行五步流程来了解将该文件放置在何处以及如何命名。

对于这个问题,Meteor 1.3有两种解决方案:

1.ES6模块

Meteor 1.3(目前处于测试版)允许您使用modules包(meteor add modulesapi.use('modules'))来使用应用程序中的模块。

模块有很长的路要走,这里有一个简单的例子,直接取自上面的链接:

文件:a.js(使用传统的装载顺序规则首先装载):

import {bThing} from './b.js';
// bThing is now usable here

文件:b.js(使用传统装载顺序规则第二次装载):

export const bThing = 'my constant';

Meteor 1.3将负责在a.js之前加载b.js文件,因为它被明确告知

2.包装

声明全局变量的最后一个选项是创建一个包。

meteor create --package global_constants

不使用var关键字声明的每个变量都会导出到整个包中。这意味着您可以在变量自己的文件中创建变量,使用api.addFiles细化加载顺序,控制它们是否应该转到客户端、服务器或两者。它还允许您在其他包中api.use这些变量
这意味着清晰、可重用的代码。是否要添加常量?要么在已经创建的文件中执行,要么创建一个api.addFiles

您可以在文档中阅读更多关于包管理的信息。

以下是"构建您的应用程序"中的一句话:

这种[使用包]是代码分离、模块化和可重用性的终极体现。如果将每个功能的代码放在一个单独的包中,则一个功能的代码将无法访问另一个功能(除非通过导出)的代码,从而使每个依赖项都是显式的。这也允许对功能进行最简单的独立测试。您还可以发布包,并使用meteor add在多个应用程序中使用它们。


将这两种方法与Meteor 1.3结合在一起真是太神奇了。模块比包更容易编写,也更轻,因为使用它们是一行export和所需的尽可能多的import,而不是整个包的创建过程,但不像包那样愚蠢的防错(忘记在文件顶部编写import行)。

一个很好的选择是先使用模块,然后在它们写累或因此发生错误(import写错了…)时立即切换到包。
如果你正在做比POC更大的事情,请确保避免依赖传统的装载顺序。

您需要使它们成为全局变量,以便其他文件能够看到它们。

JavaScript

/lib/constants.js

THE_ANSWER = 42; // note the lack of var

/client/其他一些文件.js

console.log(THE_ANSWER);

CoffeeScript

/lib/constants.coffee

@THE_ANSWER = 42

/client/其他文件。咖啡

console.log THE_ANSWER