Пакет Webpack: (на первый взгляд случайные) ошибки ссылки: окно не определено - PullRequest
0 голосов
/ 28 ноября 2018

Я использую Webpack для объединения серии файлов TypeScript - приложения AngularJS.Процесс сборки работает без ошибок и предупреждений, и приложение, кажется, работает нормально, но консоль Chrome обнаруживает несколько (на первый взгляд случайных) справочных ошибок: Uncaught ReferenceError: window is not defined

Приложение даже будет работать без этих ошибок дляпериод времени, но при изменении маршрута эти ошибки будут иногда появляться.Я попытался сделать внешние библиотеки-нарушители и вытянуть их через стандартный тег <script>, и ошибки превратились в angular is not defined и выглядят аналогичным образом.Тем не менее, приложение работает нормально (с точки зрения пользователя), но консоль выявляет эти очень случайные ошибки чувств.

Я в тупике и я кажусь уникальным?Я не могу найти других, которые сталкивались с подобными проблемами.

Скриншоты ошибок консоли Chrome:

window is not defined offending line

Мой конфиг веб-пакета выглядит так (извините за прикольное форматирование, пытаюсь сжать его как можно больше):

const path = require('path');

module.exports = [
  {
    target: 'web',
    entry: './src/app.ts',
    output: {
      filename: 'my-bundle.js',
      path: path.resolve(__dirname, 'public')
    },
    module: {
      rules: [
        {
          test: /\.tsx?$/,
          loader: 'awesome-typescript-loader',
          exclude: /node_modules/
        },
        { test: /\.html$/, loader: 'html-loader' },
        {
          test: /\.scss$/,
          use: ['style-loader', 'css-loader', 'sass-loader']
        },
        { test: /\.png$/, use: ['url-loader?mimetype=image/png'] }
      ]
    },
    optimization: {
      minimize: false
    },
    resolve: {
      extensions: ['.ts', '.js', '.html']
    }
  }
];

Содержимое My app.ts (большая часть содержимого удалена для простоты)):

import './polyfills'
import * as angular from 'angular'
import * as angularUiRouter from '@uirouter/angularjs'
import { provide, bundle } from 'ng-metadata/core'

И, наконец, мой index.html

<!DOCTYPE html>
<html lang="en-us">
<head>
    <!-- links to stylesheets and whatnot -->
</head>
<body ng-app="my-app">
    <div><ui-view></ui-view></div>
    <script type="text/javascript" src="my-bundle.js"></script>
</body>

Меня убивает то, что все работает нормально, просто эти случайные ошибки появляются в консоли,Я вижу такое же поведение в Chrome, Firefox и Safari.Когда вещи кажутся «случайными», они склонны думать, что это проблемы времени.Мой пакет веб-пакетов находится в правильном месте?Когда я сделал angular внешнюю зависимость и включил ее в свой пакет, сгенерированный веб-пакетом, я вижу «случайные» ошибки angular is not defined.Был бы признателен за любую информацию!

Версии:

  • Webpack 4.26.1
  • Angular 1.6.9
  • ng-метаданные 4.0.1
  • TypeScript 2.4.0

1 Ответ

0 голосов
/ 04 декабря 2018

Welp.После очередной разочаровывающей недели отладки я наконец нашел свою проблему.Я использовал библиотеку PrismJS и даже не включил ее в мой пример выше, потому что он казался таким безобидным.PrismJS не подходит для веб-пакетов (по крайней мере, не той версии, которую я использовал).На более подробном замечании здесь я считаю, что метод highlightAll является проблематичным.

Для тех, кто может столкнуться с подобными проблемами, процесс отладки все еще может быть полезен для вас.Я заметил, что каждый раз, когда в консоли появлялась ошибка, она соответствовала очередной попытке загрузить тот же файл bundle.js.Это происходило несколько раз по всему приложению («случайно»).В конце концов я обнаружил, что запрос исходил от чего-то, связанного с Prism, и смог сделать библиотеку внешним пакетом в моей конфигурации веб-пакета, и проблема была решена!

Не все библиотеки будут дружественными для веб-пакетов.Я думал, что сделал мою должную осмотрительность, убрав несколько здесь и там, но я, очевидно, не сделал.Надеюсь, мой опыт может быть полезен кому-то еще!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...