我正在编写一个Meteor包,需要知道包含它的app的id - 相对于项目目录保存在.meteor/.id
文件中的值。
如何在开发和生产中安全地访问id?
答案 0 :(得分:1)
使用NPM从服务器端代码可以做到这一点。我刚刚在我的本地项目中测试了以下内容并且它可以工作:
// server-side code
// FYI, Npm.require works in packages only. Use meteorhacks:npm to use
// in non-package code. In meteor shell you can just use `require`.
var fs = Npm.require('fs');
var path = Npm.require('path');
var idPath = path.join(process.env.PWD, '.meteor/.id');
var fileContent = fs.readFileSync(idPath);
var fileContentLines = fileContent.toString().split('\n');
// this will contain the ID
var theId = fileContentLines[fileContentLines.length - 2];
现在,请记住,在生产中,您没有.meteor
目录。在构建文件夹中为id运行grep
之后,在我看来,ID不会存储在构建中的任何文件中。因此,您需要创建一个构建插件,确保在构建过程中使其可以在某处访问。我可能看起来不够努力,所以我肯定会看一下构建工具的来源,看看它在构建过程中对该ID的作用。
答案 1 :(得分:1)
在Meteor 1.2.1,(和1.3)中,可以通过开发模式下客户端和服务器上的__meteor_runtime_config__.appId
变量访问appId。这是没有记录的,所以我们不知道它将来是否可用。
.appId
的{{1}}属性不可用:
__meteor_runtime_config__
时)Meteor.isProduction
时)Meteor.isTest
时)答案 2 :(得分:0)
如何使用Meteor Settings文件http://docs.meteor.com/#/full/meteor_settings?它应该是正确的方法,否则你将不得不使用Node.js直接访问文件