Meteor buildtime vs runtime-如何将Package.js中的变量/代码与包代码本身共享?

Meteor buildtime vs runtime-如何将Package.js中的变量/代码与包代码本身共享?,meteor,packages,Meteor,Packages,我有一个包,它需要为包、测试和包本身(在运行时)定义一组资产文件(在构建时) 有没有办法分享这些变量?例如: // package.js // var shared across test and package def var BrainFiles = [ "data/begin.rive", "data/start.rive", "data/nav.rive" ] Package.on_use(function(api) { api.addFiles(Br

我有一个包,它需要为包、测试和包本身(在运行时)定义一组资产文件(在构建时)

有没有办法分享这些变量?例如:

// package.js

// var shared across test and package def
var BrainFiles = [
    "data/begin.rive",
    "data/start.rive",
    "data/nav.rive"
  ]

Package.on_use(function(api) {
  api.addFiles(BrainFiles, ['server'], 
    {isAsset: true} 
  )

  ...
}

Package.on_test(function (api) {
  api.addFiles(BrainFiles, ['server'], 
    {isAsset: true} 
  )
  ...
}

// then within the package code i want to refer to Brainfiles

我想另一种方法是编写一个文件夹扫描函数,但该代码也必须在package.js和包代码之间共享。

这并不漂亮,但我会创建一个
资产
文件
大脑文件。json

//brain-files.json
[
  "data/begin.rive",
  "data/start.rive",
  "data/nav.rive"
]
package.js中使用

并在js文件中读取/解析
read brain files.js
with


你是说brain-files.json是一个文件列表吗?我不确定上面的代码是否会在列表中读取,然后进行迭代,但我想我明白了。我不知道你是否可以在Package.js中使用Assets.getText。为了使这种方法有意义,你必须在两个地方都这样做。嗨@dcsan,我更新了我的答案来澄清。使用
package.js
中的
fs.readFileSync
读取
.json
;您可以使用
Assets.getText
在包代码中读取它。
//package.js
Package.on_use(function(api) {
  var fs = Npm.require('fs')
  var BrainFiles = JSON.parse(fs.readFileSync('brain-files.json'));
  api.addFiles(BrainFiles, 'server', {isAsset: true});

  // sets a `BrainFiles` variable for other files that are included
  api.addFiles('brain-files.json', 'server', {isAsset: true});
  api.addFiles('read-brain-files.js', 'server');

  ...
}
//read-brain-files.js
// no var, this should be accessible by all files in your package
BrainFiles = JSON.parse(Assets.getText('/packages/my-package/brain-files.json'));