Reactjs SPA перестал работать после разделения кода, (stati c пакет не загружается из AWS S3) - PullRequest
0 голосов
/ 20 февраля 2020

Мой сайт работал задолго до моего недавнего изменения. Внешний интерфейс веб-сайта находится на reactjs, а комплектация - на aws s3. До этого момента все было хорошо.

Теперь из-за огромного размера пакета stati c, а также для оптимизации моего кода я начал разбивать код через webpack split code , ленивая загрузка реакции компонент и динамический c импорт. Я использую webpack-bundle-tracker для создания пакета, потому что мой бэкэнд находится на django. Эта новая установка хорошо работает в моей локальной среде.

DEV environment: 

<script type="text/javascript" src="/static/frontend/main.35952edee77e6e3f52e5.bundle.js" ></script>

И это загружает очень хорошо отформатированный код для загрузки в моем локальном окружении:

DEV environment:

/******/ (function(modules) { // webpackBootstrap
/******/    // install a JSONP callback for chunk loading
/******/    function webpackJsonpCallback(data) {
/******/        var chunkIds = data[0];
/******/        var moreModules = data[1];
/******/
/******/
/******/        // add "moreModules" to the modules object,
/******/        // then flag all "chunkIds" as loaded and fire callback
/******/        var moduleId, chunkId, i = 0, resolves = [];
/******/        for(;i < chunkIds.length; i++) {
/******/            chunkId = chunkIds[i];
/******/            if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/                resolves.push(installedChunks[chunkId][0]);
/******/            }
/******/            installedChunks[chunkId] = 0;
/******/        }
/******/        for(moduleId in moreModules) {
/******/            if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/                modules[moduleId] = moreModules[moduleId];
/******/            }
/******/        }
/******/        if(parentJsonpFunction) parentJsonpFunction(data);
/******/
/******/        while(resolves.length) {
/******/            resolves.shift()();
/******/        }
/******/
/******/    };

Но когда я развертываю код на heroku, и pu sh stati c связывает на aws s3 перестает работать. Это не выдает никакой ошибки, поэтому я не могу понять причину этой проблемы.

Prod env

<script type="text/javascript" src="https://ecmsdjango-main.s3.amazonaws.com/staticfiles/main.54a39fc868c800757af7.bundle.js" ></script>

Далее, если я нажму на вышеуказанную ссылку aws, я смогу увидеть содержимое stati c , но это не в хорошем формате, как я мог видеть в моей локальной среде.

 Prod env

(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{1003:function(e,t,n){},1004:function(e,t,n){"use strict";n.r(t);var r=n(0),a=n.n(r),o=n(81),s=n(12),i=n(38),c=n(1),l=n.n(c),u=n(14);function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function m(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function d(e,t){return!t||"object"!==p(t)&&"function"!=typeof t?function(e){if(void 0!==e)return e;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e):t}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var g=function(){function i(){var e,t,a;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return d(a,(t=a=d(this,(e=h(i)).call.apply(e,[this].concat(r))),a.state={username:"",password:""},a.onSubmit=function(e){e.preventDefault(),a.props.login(a.state.username,a.state.password)},a.onChange=function(e){return a.setState((t={},n=e.target.name,r=e.target.value,n in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,t));var t,n,r},t))}var e,t,n;return 

Таким образом, в основном веб-сайт не загружает ничего (его пустым), но базовые пакеты имеют статус c содержание в нем. Так что мне кажется, что что-то связано с загрузчиком или может быть способ aws s3 загружает порции, но у меня пока нет причины root, пожалуйста, помогите мне исправить это. Например: веб-сайт показывает старую версию перед разделением кода, если я разверну последний код, он будет пустым.

PS Пока я отмечаю его с реакцией js, django также потому, что основной причиной разделения кода была оптимизация моего интерфейса переднего плана, и связывание его с django, но оба эти тега можно удалить.

1 Ответ

0 голосов
/ 20 февраля 2020

Проблема возникает из-за конфигурации оптимизации раскола чанков в веб-пакете, я удалил эту конфигурацию из prod, и все выглядело нормально. У меня нет этой дополнительной оптимизации в конфиге разработчика. Я отмечаю это как ответ, потому что теперь я знаю причину root, а не проблему aws s3 или webpack, и в целом это больше не проблема.

...