Javascript 当使用addScriptTag时,如何评估类型为module的脚本的结果
我试图使用addScriptTag来使用页面上的一些模块Javascript 当使用addScriptTag时,如何评估类型为module的脚本的结果,javascript,node.js,puppeteer,es6-modules,Javascript,Node.js,Puppeteer,Es6 Modules,我试图使用addScriptTag来使用页面上的一些模块 (async () => { const browser = await launch(); const page = await browser.newPage(); page.on("console", (c) => console.log(c.text())); page.on("error", (c) => console.error(c.message))
(async () => {
const browser = await launch();
const page = await browser.newPage();
page.on("console", (c) => console.log(c.text()));
page.on("error", (c) => console.error(c.message));
await page.goto("https://example.com");
await page.addScriptTag({
path: resolve(__dirname, "verbs.js"),
type: "module"
});
await browser.close(); // <==== Closes before "verbs.js" finishes doing it thing
})();
此外,我如何评估模块的结果
我想我要寻找的是从模块中获取某种导出结果的方法。喜欢阅读默认导出。也许您可以使用
在主脚本的末尾:
(异步()=>{
// ...
等待page.exposeFunction('useRes',(res)=>{
//使用res
等待浏览器关闭();
});
等待page.addScriptTag(/*…*/);
})();
在verbs.js的结尾处:
/。。。
window.useRes(res);
我想您可以在页面上添加一个侦听器,在关闭之前等待加载内容:page.on(“load”,wait browser.close})
而不是wait browser.close()
?这很有趣。我要试试这个。但是仍然存在无法评估模块脚本结果的限制。addScriptTag返回void,并且似乎并没有从模块访问数据的明显方式。e、 阅读默认导出等。我确实这样做了,但我相信你也同意,它没有优雅的。我想将解决方案扩展到100多个不同的计算模块,因此它需要适当。在没有模块的情况下拥有多个函数文件,然后对其执行page.evaluate是一种优雅的做法,但无法通过导入访问其他库。这就是为什么我在研究这个方法,最后我找到了一个通过exposeFunction可伸缩的解决方案。我认为你把这件事带回家是公平的:)谢谢
import nlp from "https://unpkg.com/compromise@13.3.1/builds/compromise.mjs";
const selectors = "p, h1, h2, h3, h4, h5, h6";
const links = [...document.querySelectorAll(selectors)];
const pageText = links.map((node) => node.textContent).join("");
const doc = nlp(pageText);
const res = doc
.verbs()
.json()
.map((noun) => noun.text);
export default res; // I need a way of accessing res from node context