Next.js: рдмрд╛рдмреЗрд▓ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рдЗрдВрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЬреБрд▓ре░ 2017  ┬╖  34рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vercel/next.js

рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдРрдк рдХреЗ рд▓рд┐рдП IE11 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
TypeError: Object doesn't support property or method 'find'

рдЕрдЧрд▓реЗ 2.4.6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд▓реЗрдХрд┐рди рдирд╡реАрдирддрдо рдмреАрдЯрд╛ рдкрд░ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╕реНрдЯрдо рдХреЗ рд╕рд╛рде babel-preset-env рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо .babelerc рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:

{
  "presets": [
    "es2015",
    "react",
    "next/babel",
    "stage-0",
    [ "env", {
      "targets": {
        "safari": 10,
        "ie": 11
      },
      "modules": false,
      "useBuiltIns": true,
      "debug": true
    }]
  ],
}

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдбрд┐рдмрдЧ рдзреНрд╡рдЬ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЙрдЧ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

babel-preset-env: `DEBUG` option

Using targets:
{
  "safari": "10",
  "ie": "11"
}

Modules transform: false

Using plugins:
  check-es2015-constants {"ie":"11"}
  transform-es2015-arrow-functions {"ie":"11"}
  transform-es2015-block-scoping {"ie":"11"}
  transform-es2015-classes {"ie":"11"}
  transform-es2015-computed-properties {"ie":"11"}
  transform-es2015-destructuring {"ie":"11"}
  transform-es2015-duplicate-keys {"ie":"11"}
  transform-es2015-for-of {"ie":"11"}
  transform-es2015-function-name {"ie":"11"}
  transform-es2015-literals {"ie":"11"}
  transform-es2015-object-super {"ie":"11"}
  transform-es2015-parameters {"ie":"11"}
  transform-es2015-shorthand-properties {"ie":"11"}
  transform-es2015-spread {"ie":"11"}
  transform-es2015-sticky-regex {"ie":"11"}
  transform-es2015-template-literals {"ie":"11"}
  transform-es2015-typeof-symbol {"ie":"11"}
  transform-es2015-unicode-regex {"ie":"11"}
  transform-regenerator {"ie":"11"}
  transform-exponentiation-operator {"safari":"10","ie":"11"}
  transform-async-to-generator {"safari":"10","ie":"11"}
  syntax-trailing-function-commas {"ie":"11"}

Using polyfills:
  es6.typed.array-buffer {"ie":"11"}
  es6.typed.int8-array {"ie":"11"}
  es6.typed.uint8-array {"ie":"11"}
  es6.typed.uint8-clamped-array {"ie":"11"}
  es6.typed.int16-array {"ie":"11"}
  es6.typed.uint16-array {"ie":"11"}
  es6.typed.int32-array {"ie":"11"}
  es6.typed.uint32-array {"ie":"11"}
  es6.typed.float32-array {"ie":"11"}
  es6.typed.float64-array {"ie":"11"}
  es6.map {"ie":"11"}
  es6.set {"ie":"11"}
  es6.weak-map {"ie":"11"}
  es6.weak-set {"ie":"11"}
  es6.reflect.apply {"ie":"11"}
  es6.reflect.construct {"ie":"11"}
  es6.reflect.define-property {"ie":"11"}
  es6.reflect.delete-property {"ie":"11"}
  es6.reflect.get {"ie":"11"}
  es6.reflect.get-own-property-descriptor {"ie":"11"}
  es6.reflect.get-prototype-of {"ie":"11"}
  es6.reflect.has {"ie":"11"}
  es6.reflect.is-extensible {"ie":"11"}
  es6.reflect.own-keys {"ie":"11"}
  es6.reflect.prevent-extensions {"ie":"11"}
  es6.reflect.set {"ie":"11"}
  es6.reflect.set-prototype-of {"ie":"11"}
  es6.promise {"ie":"11"}
  es6.symbol {"ie":"11"}
  es6.object.assign {"ie":"11"}
  es6.object.is {"ie":"11"}
  es6.function.name {"ie":"11"}
  es6.string.raw {"ie":"11"}
  es6.string.from-code-point {"ie":"11"}
  es6.string.code-point-at {"ie":"11"}
  es6.string.repeat {"ie":"11"}
  es6.string.starts-with {"ie":"11"}
  es6.string.ends-with {"ie":"11"}
  es6.string.includes {"ie":"11"}
  es6.regexp.flags {"ie":"11"}
  es6.regexp.match {"ie":"11"}
  es6.regexp.replace {"ie":"11"}
  es6.regexp.split {"ie":"11"}
  es6.regexp.search {"ie":"11"}
  es6.array.from {"ie":"11"}
  es6.array.of {"ie":"11"}
  es6.array.copy-within {"ie":"11"}
  es6.array.find {"ie":"11"}
  es6.array.find-index {"ie":"11"}
  es6.array.fill {"ie":"11"}
  es6.array.iterator {"ie":"11"}
  es6.number.is-finite {"ie":"11"}
  es6.number.is-integer {"ie":"11"}
  es6.number.is-safe-integer {"ie":"11"}
  es6.number.is-nan {"ie":"11"}
  es6.number.epsilon {"ie":"11"}
  es6.number.min-safe-integer {"ie":"11"}
  es6.number.max-safe-integer {"ie":"11"}
  es6.math.acosh {"ie":"11"}
  es6.math.asinh {"ie":"11"}
  es6.math.atanh {"ie":"11"}
  es6.math.cbrt {"ie":"11"}
  es6.math.clz32 {"ie":"11"}
  es6.math.cosh {"ie":"11"}
  es6.math.expm1 {"ie":"11"}
  es6.math.fround {"ie":"11"}
  es6.math.hypot {"ie":"11"}
  es6.math.imul {"ie":"11"}
  es6.math.log1p {"ie":"11"}
  es6.math.log10 {"ie":"11"}
  es6.math.log2 {"ie":"11"}
  es6.math.sign {"ie":"11"}
  es6.math.sinh {"ie":"11"}
  es6.math.tanh {"ie":"11"}
  es6.math.trunc {"ie":"11"}
  es7.array.includes {"ie":"11"}
  es7.object.values {"safari":"10","ie":"11"}
  es7.object.entries {"safari":"10","ie":"11"}
  es7.object.get-own-property-descriptors {"safari":"10","ie":"11"}
  es7.string.pad-start {"ie":"11"}
  es7.string.pad-end {"ie":"11"}
  web.timers {"safari":"10","ie":"11"}
  web.immediate {"safari":"10","ie":"11"}
  web.dom.iterable {"safari":"10","ie":"11"}

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд░рдирдЯрд╛рдЗрдо рдкрд░, рдореБрдЭреЗ рдЕрднреА рднреА IE11 рдкрд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрдм рдореИрдВ рдХрд┐рд╕реА рд╕рд░рдгреА рдкрд░ .find () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред

рдХреБрдЫ рднреА рдореИрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░реА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рдлрд┐рдХреНрд╕ рдПрдХ рдХрд╕реНрдЯрдо рд▓реЗрдЖрдЙрдЯ рд╣реИ редjs рдФрд░ рдЬреЛрдбрд╝рдирд╛
<script src='https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.23.0/polyfill.min.js' />

рд╕рднреА 34 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдореВрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ @ https://github.com/jonaswindey/next-polyfill-bug

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рдлрд┐рдХреНрд╕ рдПрдХ рдХрд╕реНрдЯрдо рд▓реЗрдЖрдЙрдЯ рд╣реИ редjs рдФрд░ рдЬреЛрдбрд╝рдирд╛
<script src='https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.23.0/polyfill.min.js' />

@arunoda рд╣рдордиреЗ рдЗрд╕реЗ рд╕рд╣реА un рд╕реЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рд╣реИ

рд╣реЙрдЯ-рдлрд╝рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import 'core-js/fn/array/find'

const test = ['hi', 'there'].find(item => item === 'hi')

export default () => (
  <div>{test}, welcome to next.js!</div>
)

рдореБрдЭреЗ рджреЗрдЦрдиреЗ рджреЛ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмреИрдмреЗрд▓ рдРрдк рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХреА рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкреЙрд▓реАрдлрд┐рд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЧрд▓рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдзрд┐рдХ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВред
рдмреЗрдЭрд┐рдЭрдХ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ред

@arunoda I рдиреЗ рдЗрд╕ рд╣реЙрдЯрдлрд┐рдХреНрд╕ рдХреЛ _document.js рдХреЗ рдЕрдВрджрд░ import 'core-js/fn/array/find' рдХреЗ рд╕рд╛рде рдЖрдЬрд╝рдорд╛рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдпрд╣ IE11 рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред

рдореБрдЭреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдерд╛:
<script src='https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.23.0/polyfill.min.js' />

рдореИрдВ Next.js V3.0.6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреИрд╕реЗ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╕рднреА рдХреЛ рдкреНрд░рдгрд╛рдоред
рдореИрдВрдиреЗ next.config.js рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐-рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
рдпрд╣ рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ
(https://github.com/zeit/next.js/blob/master/server/build/webpack.js#L42 рдХреЗ рдЕрдиреБрд╕рд╛рд░):

module.exports = {
  // eslint-disable-next-line no-unused-vars
  webpack(config, _) {
    const entry = async () => {
      const resolvedEntry = await config.entry()
      const entryWithPolyfill = Object.assign(
        { 'babel-polyfill': ['babel-polyfill'] },
        resolvedEntry
      )
      // console.log(entryWithPolyfill)
      return entryWithPolyfill
    }
    return Object.assign(
      config,
      entryWithPolyfill
    )
  }
}

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдмреЗрдмрд▓ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред

рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ babel-polyfill ? рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрдо рд╣реИред

@ рд░реБрдиреЛрджрд╛ рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ?

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрджреНрдпрддрди? рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ

рдЗрд╕рдореЗрдВ рднреА рд░реБрдЪрд┐ ЁЯдФ

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреИрдмреЗрд▓ рдкреЙрд▓реАрдлрд┐рд▓реНрд╕ рдХреЛ рддрдп рдХрд┐рдпрд╛:

import 'babel-polyfill';

рдкреВрд░реЗ babel-polyfill рдХрд╛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╣реА рдмреЗрдХрд╛рд░ рд╣реИ рдФрд░ рдпрд╣ рдЕрдЧрд▓реЗ .js, imho рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрдВрдбрд▓ рдореЗрдВ 87kb рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЪрд╛рд╣реЗ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓реНрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдпрд╛ рдирд╣реАрдВред

@sholzmayer рдиреЗ рдЖрдк import 'babel-polyfill'; рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ _document.js рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХреА

@klaemo рддреЛ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ?

transform-runtime рд╕реЗ .babelrc рдкреНрд▓рдЧ рдЗрди рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣рдо Opera 36 рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ Object.entries рдирд╣реАрдВ рдмрдиреЗ рд╣реИрдВред

"plugins": [
    "transform-runtime"
]

@hugotox рдПрдХ рдРрдк рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк https://polyfill.io рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдРрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ polyfills.js рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

// Language features presented by https://github.com/zloirock/core-js
import 'core-js/fn/object/assign'
import 'core-js/fn/string/ends-with'
import 'core-js/fn/string/starts-with'
import 'core-js/fn/string/includes'
import 'core-js/fn/array/includes'
import 'core-js/fn/weak-map'

// browser features
import 'raf/polyfill'
import 'isomorphic-fetch'
import 'js-polyfills/url'

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдиреЗрдХреНрд╕реНрдЯ core-js рдЬрд░реВрд░рдд рдХреЗ рд╕рднреА рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рдЖрдпрд╛рдд рдФрд░ рдмрдВрдбрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@igimanaloto рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛

рдореИрдВ рднреА transform-runtime рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ IE рдкрд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

{
  "plugins": [
    "source-map-support",
    "transform-runtime"
  ],
  "presets": [
    ["env", {
      "targets": {
        "node": "6.10"
      }
    }],
    ["stage-3"],
    [
      "next/babel",
      {
        "styled-jsx": {
          "optimizeForSpeed": true,
          "vendorPrefixes": true,
          "sourceMaps": true,
          "plugins": [
            "styled-jsx-plugin-sass"
          ]
        }
      }
    ]
  ]
}

@bliitzkrieg babel-polyfill _document.js рдЖрдпрд╛рдд рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ _document.js рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЖрдорддреМрд░ рдкрд░, рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХреА рдЧрдИ рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓ рдареАрдХ рдХрд░реЗрдЧреАред

рдЕрджреНрдпрддрди: IE резреж, резрез рдХреЗ рд▓рд┐рдП core-js/library/fn/object/assign client/polyfill.js core-js/fn/object/assign рдмрджрд▓рд╛ (рдХреИрд╕реЗ


рдпрд╣рд╛рдБ рдКрдкрд░ @klaemo рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рдВрдпреЛрдЬрди рдФрд░ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг, рдХреИрдирд░реА / рдЙрджрд╛рд╣рд░рдг / рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рд╕рд╛рде рдирд┐рдпреЛрдЬрд┐рдд next 5.1.0 рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

[рдореВрд▓ рдкреНрд░рд╢реНрди] рдореЗрд░реЗ рдЧреНрд░рд╛рд╣рдХ / polyfills.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ core-js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ IE11 рдорд┐рд▓рддрд╛ рд╣реИ? (рдореИрдВ рдПрдХ рдЖрдпрд╛рдд рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ IE11 рд╕рдмрдХреБрдЫ рдЧрд╛рдпрдм рд╣реИ рдФрд░ рдлрд┐рд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрд╕ рд░реЗрдВрдЬ рдХреЛ рдЬреАрддрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдРрдк рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдпрд╣рд╛рдБ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдореИрдВрдиреЗ рдХреБрдЫ OS + рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдпреЛрдЬрдиреЛрдВ (Browserstack рдкрд░) рдкрд░ рдФрд░ рдпрд╣ рддрдм рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ Windows 10 + IE11 (рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛) рдкрд░

screen shot 2018-04-21 at 3 49 31 pm

рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░, .babelrc рдФрд░ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗ рд╕рд╛рде рдХреНрд░реЛрдо 43 рдкрд░ next 5.1.0 рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред import 'core-js/fn/object/assign'; рдиреЗ рдЪрд╛рд▓ рдЪрд▓реАред

рдЗрд╕ рдХреАрдбрд╝реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ! рдореИрдВ IE 11 рдореЗрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдорджрдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдПрдПрдирдПрд╕рдЖрдИ-рд░реЗрдЧреЗрдХреНрд╕ рдкреИрдХреЗрдЬ рд▓рдЧрддреА рд╣реИ рдЬреЛ рдПрдХ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣ рдЕрдЧрд▓реЗ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдмрдирддреА рд╣реИред

@arunoda @timneutkens рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рд╛рдВ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред рдореИрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рд░реНрди рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

import 'core-js/fn/object/assign' рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред

core-js рдкрд╣рд▓реЗ ( yarn add core-js ) рдЬреЛрдбрд╝рдирд╛ рдерд╛ - рдмреЗрд╢рдХред

рдореБрдЭреЗ рдпрд╣ рдорджрджрдЧрд╛рд░ рд▓рдЧрд╛: https://github.com/aspnet/JavaScriptServices/wiki/Supporting-Internet-Explorer-11- (рдпрд╛ рдкреБрд░рд╛рдиреЗ)

рдХреГрдкрдпрд╛ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП ES6 рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреЛрдбрд╝реЗрдВред

рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ред @arunoda

рдореБрдЭреЗ рдСрдмреНрдЬреЗрдХреНрдЯ 11, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд┐рд▓реАрдВред String.endsWith on ie11 (рдЕрдЧрд▓реЗ@6.0.3 рдкрд░)

const {basedir} = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('./ рд╕рд░реНрд╡рд░ / рд╡рд┐рдиреНрдпрд╛рд╕');

рдЧреИрд░-рд╕рджрд╛рдмрд╣рд╛рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП // рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдЖрд╡рд╢реНрдпрдХ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ)
рдХрд╛рд╕реНрдЯ рдкреЙрд▓реАрдлрд╝рд┐рд▓реНрд╕ = [
'рдХреЛрд░-js / fn / рд╡рд╕реНрддреБ / рдЕрд╕рд╛рдЗрди',
'рдХреЛрд░-js / fn / рд╕реНрдЯреНрд░рд┐рдВрдЧ / рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ-рдХреЗ рд╕рд╛рде',
'рдХреЛрд░-js / fn / рд╕реНрдЯреНрд░рд┐рдВрдЧ / рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ-рдХреЗ рд╕рд╛рде',
'рдХреЛрд░-js / fn / рд╕реНрдЯреНрд░рд┐рдВрдЧ / рд╢рд╛рдорд┐рд▓ рд╣реИ,
'рдХреЛрд░-js / fn / рд╕рд░рдгреА / рд╢рд╛рдорд┐рд▓ рд╣реИ,
'рдХреЛрд░-js / fn / рдХрдордЬреЛрд░ рдирдХреНрд╢рд╛',
];

module.exports = {
  webpack: (config, {dev, isServer}) => {
    const originalEntry = config.entry;
    if (!isServer) {
      config.entry = async () => {
        const entries = await originalEntry();
        Object.values(entries).forEach(entry => {
          entry.unshift(...polyfills);
          if (dev) {
            entry.unshift('eventsource-polyfill');
          }
        });
        return entries;
      };
    }

    return config;
  },
};

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдХрднреА-рдХрднреА рдорд┐рд▓рддрд╛ рд╣реИ

Cannot redefine non-configurable property 'endsWith'

рдореИрдВрдиреЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ред
IE11 рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ client/polyfills.js :

import 'core-js/es6/map';
import 'core-js/es6/set';

import 'core-js/fn/object/assign';
import 'core-js/fn/string/ends-with';
import 'core-js/fn/string/starts-with';
import 'core-js/fn/string/includes';
import 'core-js/fn/array/includes';
import 'core-js/fn/array/find';

import 'core-js/fn/number/is-finite';

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдм рднреА рдХреБрдЫ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЕрдирдВрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдРрдк рдмрд╣реБрдд рдХрдо рд╣реИред

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ IE11 рдореЗрдВ рдХреНрд▓рд╛рд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдлрд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИ?

рдХрдХреНрд╖рд╛ рдлреВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ ...

рдЖрдкрдХреЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓реНрд╕ рдореЗрдВ 'рдЖрдпрд╛рдд' рдХреЛрд░-рдЬреЗрдПрд╕ / рдПрд╕ 6 / рдСрдмреНрдЬреЗрдХреНрдЯ ';' рд▓рд╛рдЗрди

рдореИрдВрдиреЗ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рдерд╛ рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

@peec рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐? рдореБрдЭреЗ рдРрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА рдЬреЛ рдЕрдпреЛрдЧреНрдп рдереА?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

olifante picture olifante  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

irrigator picture irrigator  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rauchg picture rauchg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

flybayer picture flybayer  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DvirSh picture DvirSh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ