Настроил webpack + babel следующим образом
webpack.config.js
...
module: {
rules: [
{
test: /.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
...
.babelrc
{
"plugins": ["lodash", "transform-object-rest-spread"],
"presets": [
["env", {
"targets": [
"> 4%",
"ie 11",
"safari 8"
]
}],
"react",
"react-optimize"
],
"env": {
"test": {
"presets": ["es2015", "react"]
}
}
}
Запускаю в chrom все ок, в IE 11 выдает ошибку
Объект не поддерживает свойство или метод «assign»
@John Doe
I figured out from your comment that you want to implement this in node/react stack. This is very different from original question and you should have asked your own
Anyways, Heres what you need to do…
You can use [es6-object-assign][1]. It is an ES6 Object.assign() «polyfill».
First, in package.json
in your root folder, add es6-object-assign
as a dependency:
"dependencies": {
"es6-object-assign": "^1.0.2",
"react": "^0.12.0",
...
},
Then if you want to use it in node environment use:
require('es6-object-assign').polyfill();
If you are having the issue on front (browser) end…
Add it in your index.html file…
<script src="location_of_node_modules/es6-object-assign/dist/object-assign.min.js"></script>
<script>
window.ObjectAssign.polyfill();
</script>
location_of_node_modules
depends on boilerplate you use, mostly just node_modules
, but sometimes when index.html is in a subdirectory you need to use, ../node_modules
9 ответов
Как отмечали другие, метод Object.assign() не поддерживается в IE, но имеется polyfill, просто включите его перед тем, ваше объявление плагина:
if (typeof Object.assign != 'function') {
Object.assign = function(target) {
'use strict';
if (target == null) {
throw new TypeError('Cannot convert undefined or null to object');
}
target = Object(target);
for (var index = 1; index < arguments.length; index++) {
var source = arguments[index];
if (source != null) {
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
}
return target;
};
}
Из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Страница тестирования http://jsbin.com/pimixel/edit?html,js,output (просто удалите polyfill, чтобы получить ту же самую ошибку, которую вы получаете на своей странице).
Andres Ilich
18 авг. 2016, в 15:56
Поделиться
@Джон Доу
Из вашего комментария я понял, что вы хотите реализовать это в стеке узлов/реагирования. Это сильно отличается от оригинального вопроса, и вы должны были задать свой собственный;)
В любом случае, вот что тебе нужно сделать…
Вы можете использовать [es6-object-assign] [1]. Это ES6 Object.assign() «polyfill».
Сначала в package.json
в корневой папке добавьте es6-object-assign
в качестве зависимости:
"dependencies": {
"es6-object-assign": "^1.0.2",
"react": "^0.12.0",
...
},
Тогда, если вы хотите использовать его в среде узла, используйте:
require('es6-object-assign').polyfill();
Если у вас возникла проблема с интерфейсом (браузером)…
Добавьте его в свой файл index.html…
<script src="location_of_node_modules/es6-object-assign/dist/object-assign.min.js"></script>
<script>
window.ObjectAssign.polyfill();
</script>
location_of_node_modules
зависит от используемого вами шаблона, в основном это только node_modules
, но иногда, когда index.html находится в подкаталоге, который вам нужно использовать, ../node_modules
shramee
20 авг. 2016, в 04:19
Поделиться
Возможное решение этой проблемы:
Добавьте script legacy.min.js перед custombox.min.js
source: проект gigaub custombox
aprovent
19 авг. 2016, в 15:11
Поделиться
@Андрес-Ильич имеет правильный ответ на ваш вопрос, но вы задаете неправильный вопрос:
Почему бы просто не использовать плагин jQuery, поддерживающий IE, как Zurb excellent Reveal: https://github.com/zurb/reveal
Он сделает все, что захочет, и не выбросит эту ошибку.
staypuftman
19 авг. 2016, в 21:03
Поделиться
В настоящее время работает над всплывающим окном jQuery:
https://github.com/seahorsepip/jPopup
Есть все, что вы ожидаете от всплывающего окна и больше: D
В любом случае, по теме, я в настоящее время пишу версию 2, которая является большой перепиской и добавляет поддержку IE6 (версия 1 была IE7 +) и столкнулась с аналогичной ошибкой…
Исходный код, который дал ошибку в IE6:
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div style="position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;"></div>");
Сбой, который я должен был придумать:
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div>");
this._vars.fakeScrollbar.html("<div style="position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;"></div>");
this._vars.fakeScrollbar = this._vars.fakeScrollbar.children();
seahorsepip
20 авг. 2016, в 16:05
Поделиться
Поскольку вы отметили вопрос с помощью jQuery, вы можете использовать функцию jQuery extend. Нет необходимости в polyfill, и он также глубоко объединяется.
Пример:
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1
$.extend( object1, object2 );
Результат:
{"apple":0,"banana":{"price":200},"cherry":97,"durian":100}
Kalimah Apps
04 янв. 2017, в 05:11
Поделиться
В принципе, Object.assign
не поддерживается всеми браузерами, однако можно повторно назначить его в Object
, если он не поддерживается текущим браузером.
Предпочитает сделать функцию polyfill, которая ведет себя так же, как Object.assign(target, ...)
ES6.
Я думаю, что лучшим решением является итерация каждого аргумента после target
, присваивание каждому свойству объектов arguments
target
, учитывая итерацию между объектами и массивами, чтобы избежать создания ссылок. Необязательно, чтобы не потерянные экземпляры, вы можете определить, равен ли последний экземпляр свойства только "Array"
или "Object"
, и при этом вы не потеряете интерфейс Image
(например), если вы планируете создавать новые ссылки, но объекты с этими экземплярами все равно будут ссылаться.
Изменить: исходный Object.assign
не работает таким образом.
В соответствии с этим решением у меня есть свой polyfill, который можно найти здесь.
hydroper
20 авг. 2016, в 22:01
Поделиться
Ещё вопросы
- 0Как уничтожить все элементы с помощью вкладок jQuery UI?
- 0ошибки opencv при использовании с приложениями формы Windows
- 0Как включить аргумент с API CreateProcess в VC ++?
- 0asp: текстовое содержимое ярлыка не отображается как
- 0PHP в JavaScript с помощью кнопки «Отправить»
- 0не удается установить Dlib на Windows 10
- 0Мусор в результате загрузки (Indy, Delphi 2009)
- 1Клонировать массив с оператором распространения и добавить встроенный
- 0Как выровнять навигационную панель по нижней части окна без зазора между кнопками и краем окна
- 1получить количество страниц в текстовом документе, используя aspose
- 0Правильный способ получения данных из многомерного массива
- 1Как вручную добавить установщик в службу Windows?
- 1Visual Studio 2017 Cordova & Android
- 0Как исключить строки со значениями ‘0’, но не строки со значениями NULL в SQL?
- 0Попытка создать функцию, где я могу искать в моей базе данных и получать результаты поиска. ошибки
- 0Панель навигации MYSQL добавляет категорию в таблицу категорий, но проверяет, существует ли категория
- 0Соединить две таблицы подзапроса
- 0Я не могу сгенерировать автоинкрементный Id, а hibernate всегда генерирует 1 как Id
- 0Выполнить код JS после завершения обратного вызова setTimeout ()
- 1Как найти и разделить строковые значения в текстовых файлах, используя Java?
- 1Python: передача функции в качестве параметра в классе
- 0использование REGXP в MySQL для поиска и замены
- 1Можно ли сериализовать и десериализовать объект, который содержит объект в качестве переменной в Firebase?
- 1оператор if, включая hover () и ширину окна
- 1Превратить arraylist из строки в arraylist
- 0Как показать GridView во всплывающем окне jQuery с помощью GridView Paging?
- 0Интеграция программы, написанной на C, с другой, написанной на C ++
- 1Статические кнопки под ScrollView с динамическим расположением таблиц внутри
- 0Правильное использование YouTube URL Regex
- 0я хочу добавить два элемента в этот список из mysql
- 0Как получить значение даты из защищенного массива?
- 1Сортировка не работает в области базы данных в моем приложении
- 0Нумерация страниц в PHP
- 1Как получить XML-контент в виде строки
- 1Модель связывания динамически в angular2
- 0Какой быстрый способ добавить новые строки кода в начало и конец всех моих файлов?
- 0уникальный указатель в связанном стеке
- 0Изображения появляются в Chrome, но не в IE
- 0Подсчет записей за каждый месяц, в том числе с нулевым результатом
- 1Фильтрация результатов по пересечению коллекций?
- 0Учебное пособие по Google Blobstore App Engine
- 0Добавление файла в crontab через скрипт php
- 0получить <image> src php для отображения в html
- 0Проверка JQuery не запускается для флажков
- 1поле ввода события Pygame
- 1Понимание «побочных эффектов» в Javascript с учетом функций первого класса
- 0Удалить дубликаты записей из таблицы, где идентификатор дублируется
- 0Могу ли я инициализировать объект в списке инициализации другим членом класса?
- 0Хранить объемные изображения в $ localStorage — Angular JS
- 0MySQL имеет функцию заполнения (), когда я использую month () для заполнения данных?
Настроил webpack + babel следующим образом
webpack.config.js
...
module: {
rules: [
{
test: /.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
...
.babelrc
{
"plugins": ["lodash", "transform-object-rest-spread"],
"presets": [
["env", {
"targets": [
"> 4%",
"ie 11",
"safari 8"
]
}],
"react",
"react-optimize"
],
"env": {
"test": {
"presets": ["es2015", "react"]
}
}
}
Запускаю в chrom все ок, в IE 11 выдает ошибку
Объект не поддерживает свойство или метод «assign»
Объект не поддерживает свойство или метод assign
Ответы в сети вроде-бы есть но, ничего не помогло. Возможно слайдер swiper использует ES6
вот файл .babelrc
{
"presets": ["@babel/preset-env"],
"plugins": ["@babel/plugin-transform-object-assign"]
}
webpack.config.js
const path = require('path');
module.exports = {
mode: process.env.NODE_ENV, // development не сжатый а продакшн сжатый
entry: ['./scripts/main.js'],
module: {
rules: [
{
exclude: [/node_modules/(?!(swiper|dom7)/).*/, /.test.jsx?$/],
test: /.jsx?$/,
use: [{ loader: 'babel-loader' }],
}
]
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'www/scripts')
}
};
package.json
{
"name": "gulp",
"version": "1.0.0",
"main": "index.js",
"browserslist": [
"> 1%",
"not ie < 11",
"not OperaMini all"
],
"license": "MIT",
"scripts": {
"dev": "cross-env NODE_ENV=development gulp dev",
"build": "cross-env NODE_ENV=production gulp build"
},
"devDependencies": {
"@babel/core": "^7.1.2",
"@babel/plugin-transform-object-assign": "^7.8.3",
"@babel/plugin-transform-property-mutators": "^7.8.3",
"@babel/preset-env": "^7.1.0",
"babel-loader": "^8.0.4",
"browser-sync": "^2.24.7",
"cross-env": "^5.1.5",
"csso": "^3.5.1",
"eslint": "^5.4.0",
"gulp": "^4.0.0",
"nunjucks": "^3.1.3",
"postcss": "^7.0.2",
"postcss-easy-import": "^3.0.0",
"postcss-mixins": "^6.2.0",
"postcss-nested": "^3.0.0",
"postcss-object-fit-images": "^1.1.2",
"postcss-preset-env": "^5.3.0",
"prettier": "1.14.2",
"request": "^2.88.0",
"stylelint": "^9.4.0",
"svg-sprite": "^1.4.0",
"svgo": "^1.1.1",
"webpack": "^4.23.1"
},
"dependencies": {
"lozad": "^1.9.0",
"object-fit-images": "^3.2.4",
"svgxuse": "^1.2.6",
"swiper": "^5.3.1",
"web-animations-js": "^2.3.1"
}
}