我想使用npm twitter包,它recommends to use env variables,但 setting it up on windows machines is horror ,所以我想避免使用env变量。接下来尝试将变量保存在外部json文件(like here in my repo)中,该文件永远不会被提交,但它与CI 的效果不佳,因为如果它不在repo中,我该如何使用它和测试,对吗?
让我说明一下。
env变量(windows用户的噩梦):
var Twitter = require('twitter');
var client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY,
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET,
});
untestable crap
var Twitter = require('twitter');
var keys = require('./keys.json');
var client = new Twitter(keys);
在.gitignore
中使用此行:
keys.json
没有赢家的情况;还有更好的办法吗?
在这种情况下没有赢家,这让我感到难过。 我想实现两个简单的目标:易于消费和可测试性。你能帮助我吗?你怎么处理这个?
更新:我正在谈论基于Twitter API开发开源库,而不是最终用户产品,我觉得在回购邮件中保留令牌是不安全的。
更新2: Windows用户拥有set
和setx
命令。欢呼!感谢Martin Konecny注意到这一点。
解决方案:虽然在Windows中设置env变量没有废话,最好让代码使用者选择如何将数据传递给他的最终产品(这是使用我的LIB)。所以我们最终得到的情况是没有"数据传递"因为它是可测试的,因为我可以在我的测试中使用env变量在Travis CI中测试它。
答案 0 :(得分:2)
让您的用户选择最适合他的方式。实现(或使用库,因为有大多数语言的库)可以让你以多种不同的格式传递和影子属性:api,file,envs,命令行。 然后:
答案 1 :(得分:1)
由于这是一个开源项目,您很可能无法在项目本身中包含您的Twitter API密钥。我看到两个可能的解决方案:
选项#2可能并不理想,因为它没有考虑来自Twitter的任何未来API更改,但是它允许您在假设API保持稳定的情况下测试任何提交的破坏。