gpt4 book ai didi

javascript - 当使用所有文件都需要的模块时,如何将代码拆分到多个文件中?

转载 作者:行者123 更新时间:2023-11-30 21:08:59 25 4
gpt4 key购买 nike

在本例中,我使用的是 puppeteer chrome headless 浏览器和 MongoDB。这是我的代码:

var browser = await puppeteer.launch()
var page = await browser.newPage()
var db = await MongoClient.connect("mongodb://localhost:27017/bot")
var scraped_users = db.collection("scraped_users")

我想将我的代码拆分成相关文件,如 chrome.jstwitter.jsdatabase,jsutilities .js 等。问题是我几乎在每个文件中都需要上面声明的那 4 个变量,在每个函数中传递它们似乎很愚蠢。我也不能在每个文件中重新声明它们,因为那样会打开一个新的 chrome 浏览器并建立一个新的数据库连接。

最佳答案

假设您有一个文件 init.js:

/*let isInitialized, browser, page, db, scraped_users

async function init() {
if (!isInitialized) {
browser = await puppeteer.launch()
page = await browser.newPage()
db = await MongoClient.connect("mongodb://localhost:27017/bot")
scraped_users = db.collection("scraped_users")
isInitialized = true
}
return { browser, page, db, scraped_users }
}

module.exports = init*/

let common = {}; //store some global's.

//this should only be called once, eg. when App starts
common.init = async function () {
this.browser = await puppeteer.launch()
this.page = await this.browser.newPage()
this.db = await MongoClient.connect("mongodb://localhost:27017/bot")
this.scraped_users = this.db.collection("scraped_users")
}

module.exports = common;

然后像这样使用它:

/*const init = require('./init.js')

init().then(({browser, page, db, scraped_users}) => {
console.log(browser, page, db, scraped_users)
})*/

const common = require('./common');
const doSomething = require('./do-something');

async function run() {
await common.init(); //this only needs to be done once
console.log(common.browser); //etc
await doSomething();
}

//now inside other units, eg. do-something.js
const common = require('./common');
async function doSomething() {
console.log(common.browser);
}

关于javascript - 当使用所有文件都需要的模块时,如何将代码拆分到多个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46321234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com