2015-06-22 94 views
1

我使用browserify上一個項目,我在下面的運行:無法訪問所需文件變量

我有一個文件test.js.在test.js中只有以下內容:

var test = 'test'; 

現在,在同一個目錄中我有我的主文件'app.js'。我需要test.js並嘗試訪問'測試',如下所示:

var testing = require(./test.js); 
alert(test); 

失敗並且控制檯返回'test is undefined'。現在

,我也嘗試把這個在 'test.js',而不是:

module.exports = { 
    test: 'test' 
} 

和在app.js:

var testing = require(./test.js); 
alert(testing.test); 

這的工作,但它不是什麼我想要。我不想在一個對象中定義每個變量,函數等。我希望test.js代碼的整個文件能夠在app.js中的代碼之前通過gulp寫入,就好像它是一個服務器包含或者好像這兩個文件都在'head'元素中,並且test.js寫入了第一。

這種行爲甚至可能嗎?

+0

*「這種行爲甚至可能嗎?」*它可能帶有一些自定義預處理腳本,但這會讓您的代碼難以維護。例如。在每個包含'test.js'的文件中,你都必須記住哪個變量是在該文件中聲明的,這樣你就不會意外地覆蓋它們。你基本上想要全局變量,但是爲什麼要避免使用全局變量是有原因的。如果你只是想「自動導出」所有已定義的變量,那是不可能的。也許你應該看看ES6模塊的定義,它可以讓你編寫'export var test ='test';'。 –

+0

但是,這就是CommonJS模塊應該如何工作......儘管(不好的做法),你可以使用全局變量。 Google - > Node.js全局變量 – reg4in

回答

1

沒有自定義邏輯,不可能實現你想要的。不過,我相信你可以通過使用ES6 modules而不是CommonJS模塊來找到一個妥協方案。

你就可以寫

export var test = 'test'; 

其聲明和出口變量test。然後您可以導入它

import {test} from './test'; 

由於您使用的是browserify,將ES6模塊插入CommonJS轉換器非常簡單。例如。你可以使用Babel