首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webpack添加jQuery插件:错误: jQuery需要一个带有文档的窗口

Webpack添加jQuery插件:错误: jQuery需要一个带有文档的窗口
EN

Stack Overflow用户
提问于 2017-10-30 10:35:27
回答 1查看 2K关注 0票数 0

我使用的是角4+网络包,我在nonTreeShakableModules const中添加了一个webpack.config.vendor.js插件:

代码语言:javascript
复制
const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const merge = require('webpack-merge');

const treeShakableModules = [
    '@angular/animations',
    '@angular/common',
    '@angular/compiler',
    '@angular/core',
    '@angular/forms',
    '@angular/http',
    '@angular/platform-browser',
    '@angular/platform-browser-dynamic',
    '@angular/router',
    'font-awesome/css/font-awesome.css',
    'zone.js',

];
const nonTreeShakableModules = [
    'bootstrap',
    'bootstrap/dist/css/bootstrap.css',
    'es6-promise',
    'es6-shim',
    'event-source-polyfill',
    'jquery',
    'virtual-keyboard'              //HERE
];

在启动应用程序时,我得到了以下错误:

NodeInvocationException:打印失败是因为错误:jQuery需要一个带有文档的窗口

如果我刷新页面2-3次,错误就消失了.谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-30 20:00:49

正如您的前一个问题的注释中所述,您不能在服务器端运行javascript代码,它依赖于window和其他一些情况(比如会话存储)和服务器端预呈现。

模板,如ASP.NET核心角网页模板与服务器端呈现启用。对于不需要会话存储、身份验证或访问浏览器组件或dom-tree的应用程序来说,这很好。

您必须通过从中删除asp-prerender-module="ClientApp/dist/app.module.server.ts"标记助手来禁用服务器侧预录制。

替换

代码语言:javascript
复制
<my-app asp-prerender-module="ClientApp/dist/app.module.server.ts"></my-app>

使用

代码语言:javascript
复制
<my-app></my-app>

当然,用应用程序的选择器替换my-app,通常是模板中的app

或者,您必须有条件地运行代码,如这个GitHub问题中所指出的:

代码语言:javascript
复制
// boot-client.ts file 
import 'ngx-charts';

// some.component.ts
import { isBrowser } from 'angular2-universal';
import * as $ from 'jquery';

// inside ngOnInit 
if (isBrowser) { 
    $('body').hide();  // or whatever call you need to make
}

以避免在服务器端预呈现上运行这样的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47013168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档