2015-04-26 59 views
2

我想使用npm的twitter包,它recommends to use env variables,但setting it up on windows machines is horror,所以我想避免env變量。接下來的嘗試是保留外部json文件(like here in my repo)中的變量,這是永遠不會提交的,但是它與CI不兼容,因爲如果它不在回購中,我該如何使用它並進行測試,對吧?有沒有更好的方法將敏感數據傳遞給程序,替代env變量?

讓我表演。

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, 
}); 

不可測的廢話

var Twitter = require('twitter'); 
var keys = require('./keys.json'); 
var client = new Twitter(keys); 

這條線在.gitignore

keys.json 

沒有贏家情況;有沒有更好的辦法?

在這種情況下沒有贏家,這讓我很難過。 我想實現兩個簡單的目標:簡單的消費和可測試性。你能幫我嗎?你如何處理這個問題?

更新:我正在談論開發基於twitter API的開源庫,而不是最終用戶產品,我覺得在回購中保留令牌是不安全的。

更新2: Windows用戶擁有setsetx命令。歡呼! thx馬丁Konecny注意到這一點。

解決方案:上,但在Windows中設置了ENV變量沒有廢話,這是更好地讓消費者代碼選擇如何將數據傳遞給他的最終產品(這是用我的LIB)。所以我們結束了沒有「數據傳遞」問題的情況。因爲它是可測試的,因爲我可以在我的測試中使用env變量來在Travis CI中測試它。

回答

2

只是讓你的用戶選擇對他最好的。實現(或使用庫,因爲大多數語言都有這樣的庫),它可以讓你以許多不同的格式傳遞和映射屬性:api,file,envs,command line。 則:

    在當地測試,你可以簡單地使用API​​的測試配置的一部分
  • 在集成測試,你可以把JSON文件
  • (由混帳忽略)
  • 上特拉維斯您可以使用命令行參數或環境屬性
  • 生產將使用與配置環境屬性或遠程服務器
+0

我以類似的方式結束了,謝謝 –

1

由於這是一個開源項目,您很可能無法將您的Twitter API密鑰包含在項目本身中。我看到了兩個可能的解決方案:

  1. 要求用戶爲自己的Twitter API 憑證登記,並運行該項目,它的測試 之前把它們添加到您的項目的配置文件。
  2. 如果您嘗試使用 類似Travis CI來自動測試任何新的提交,您可能需要改爲mock your requests

選項2可能並不理想,因爲它沒有考慮到來自Twitter的任何未來的API更改,但是它允許您測試任何提交的破壞,假設API保持穩定。

+0

「要求用戶爲自己的Twitter API證書註冊」 - 這是確定ay –

+0

真正的問題是如何將它傳遞給程序,而不是使用env變量而不是使用配置文件。 –

+0

假設他們正在從Windows終端運行測試,那麼怎樣才能阻止他們執行'set TWITTER_CONSUMER_KEY = xxx'? –

相關問題