2017-09-21 58 views
0

我想分割我的代碼在多個文件,但它不工作,我不知道爲什麼。如何在Node.js中的多個文件中分割代碼?

我有3個文件,main.js,common.js和doSomething.js。 common.browser是一個chrome實例,所以重要的是它只啓動一次,並且我可以從每個文件訪問它。

在我的代碼下面,它不工作。 common.browserdoSomething.print()

//File 1: main.js 
(async() => { 
    const common = require('./common') 
    const doSomething = require('./doSomething') 

    await common.init() 
    doSomething.print() //<-- prints 'undefined' 
})() 



//File 2: common.js 
const puppeteer = require('puppeteer') 
let common = {} 

common.init = async() => { 
    common.browser = await puppeteer.launch() 
} 

module.exports = common 



//File3: doSomething.js 
const common = require('./common') 
let doSomething = {} 
const browser = common.browser //<-- Added this and it makes it not work. 

doSomething.print =() => { 
    console.log(browser) 
} 

module.exports = doSomething 
+0

嘗試增加.js文件的每個文件,至少這是我做的方式,也儘量require_once – SPlatten

+0

'''''''''''''''''''const const puppeteer = require('puppeteer')' - 嘗試在這裏輸入'。/ puppeteer',您缺少'。/' –

+0

'doSomething.print()// < - returns undefined'它返回undefined?因爲如果函數print返回undefined,則它正常。 –

回答

1

未定義在你common.js文件你在這裏設置this.browser = await puppeteer.launch(),關鍵字this沒有指向對象common

您可以簡單地使用通用對象。

//File 2: common.js 
const puppeteer = require('puppeteer') 
let common = {} 

common.init = async() => { 
    common.browser = await puppeteer.launch() 
} 

module.exports = common 

或者,如果你想使用this,你必須給共同構造並創建實例。

const puppeteer = require('puppeteer') 
const common = function() {} 

common.prototype.init = async function() { 
    this.browser = await puppeteer.launch() 
}; 

module.exports = new common() 

和以前一樣與類語法(你需要節點8.xx)

const puppeteer = require('puppeteer') 

class Common { 
    constructor() {} 

    async init() { 
     this.browser = await puppeteer.launch(); 
    } 
} 

module.exports = new Common(); 
相關問題