jsdom.env 不支持 node.js C9
jsdom.env not working on node.js C9
所以我最近一直在 C9 上使用 Node.js,运行 在 javascript 文件中解决这个问题:
jsdom.env("", function(err, window) {
TypeError: jsdom.env is not a function
这是我的代码:
var jsdom = require('jsdom');
var $;
jsdom.env("", function(err, window) {
console.log("what");
if (err) {
console.error(err);
return;
}
$ = require("jquery")(window);
$.ajax(settings).done(function (response) {
console.log(response);
});
});
我更新了所有依赖项以及 Node 本身,但仍然遇到此问题。有谁知道怎么回事?
我遇到了同样的问题。一直在网上寻找解决方案。原来 jsdom 从 v10 开始更新了他们的一些特性。所以,我想在 express 应用程序的 Node.js 端使用 jQuery。
对于那些只是在寻找有关如何在 Node
中包含 jQuery
的答案的人,我想提一下,您需要使用 npm install jsdom
和 jQuery
安装 jsdom npm install jquery
。那么:
为了 jQuery
在 Node
工作,需要 window 和文件。由于 Node
中本机不存在这样的 window,因此可以通过 jsdom
如下所示进行模拟:
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);
.env() 自 v10 起已弃用。希望这对您或遇到此类问题的任何人有所帮助。
第一步:npm 安装jquery
第 2 步:npm 安装 jsdom
<!-- language: lang-js -->
//add dummy function to test jquery in Node
function fn1( value ){ console.log( "fn1 says " + value );}
function fn2( value ) {console.log( "fn2 says " + value ); return false;}
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
//comment out the line below it create problem
//global.document = document;
var $ = jQuery = require('jquery')(window);
var callbacks = $.Callbacks();
callbacks.add(fn1);
callbacks.fire("foo!");
callbacks.add( fn2 );
callbacks.fire( "fool!" );
如上所述,.env() 已弃用。
使用以下内容:
const { window } = new JSDOM(``, { runScripts: "dangerously" });
const myLibrary = fs.readFileSync("../../whatever.js", { encoding: "utf-8" });
const scriptEl = window.document.createElement("script");
scriptEl.textContent = myLibrary;
window.document.body.appendChild(scriptEl);
关于上面的答案,以及来自 jsdom 文档:
不要将 jsdom 全局变量塞入节点全局变量
A common antipattern we see when people use jsdom is copying globals
from a jsdom window onto the Node.js global, and then trying to run
the code---intended for a browser---inside Node.js. This is very bad
and you should not do it. It runs code intended for the web browser in
some kind of hybrid franken-environment polluted with a ton of globals
that don't make sense there, and loses all benefits of isolating your
code into a jsdom window.
https://github.com/jsdom/jsdom/wiki/Don%27t-stuff-jsdom-globals-onto-the-Node-global
所以我最近一直在 C9 上使用 Node.js,运行 在 javascript 文件中解决这个问题:
jsdom.env("", function(err, window) {
TypeError: jsdom.env is not a function
这是我的代码:
var jsdom = require('jsdom');
var $;
jsdom.env("", function(err, window) {
console.log("what");
if (err) {
console.error(err);
return;
}
$ = require("jquery")(window);
$.ajax(settings).done(function (response) {
console.log(response);
});
});
我更新了所有依赖项以及 Node 本身,但仍然遇到此问题。有谁知道怎么回事?
我遇到了同样的问题。一直在网上寻找解决方案。原来 jsdom 从 v10 开始更新了他们的一些特性。所以,我想在 express 应用程序的 Node.js 端使用 jQuery。
对于那些只是在寻找有关如何在 Node
中包含 jQuery
的答案的人,我想提一下,您需要使用 npm install jsdom
和 jQuery
安装 jsdom npm install jquery
。那么:
为了 jQuery
在 Node
工作,需要 window 和文件。由于 Node
中本机不存在这样的 window,因此可以通过 jsdom
如下所示进行模拟:
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);
.env() 自 v10 起已弃用。希望这对您或遇到此类问题的任何人有所帮助。
第一步:npm 安装jquery
第 2 步:npm 安装 jsdom
<!-- language: lang-js -->
//add dummy function to test jquery in Node
function fn1( value ){ console.log( "fn1 says " + value );}
function fn2( value ) {console.log( "fn2 says " + value ); return false;}
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
//comment out the line below it create problem
//global.document = document;
var $ = jQuery = require('jquery')(window);
var callbacks = $.Callbacks();
callbacks.add(fn1);
callbacks.fire("foo!");
callbacks.add( fn2 );
callbacks.fire( "fool!" );
如上所述,.env() 已弃用。
使用以下内容:
const { window } = new JSDOM(``, { runScripts: "dangerously" });
const myLibrary = fs.readFileSync("../../whatever.js", { encoding: "utf-8" });
const scriptEl = window.document.createElement("script");
scriptEl.textContent = myLibrary;
window.document.body.appendChild(scriptEl);
关于上面的答案,以及来自 jsdom 文档:
不要将 jsdom 全局变量塞入节点全局变量
A common antipattern we see when people use jsdom is copying globals from a jsdom window onto the Node.js global, and then trying to run the code---intended for a browser---inside Node.js. This is very bad and you should not do it. It runs code intended for the web browser in some kind of hybrid franken-environment polluted with a ton of globals that don't make sense there, and loses all benefits of isolating your code into a jsdom window.
https://github.com/jsdom/jsdom/wiki/Don%27t-stuff-jsdom-globals-onto-the-Node-global