in Webpack 2, require.ensure now also returns a Promise so the resolve/reject functions may get called an extra time if the user uses an arrow function shorthand that happens to return that Promise.
function once (fn) {
  let called = false
  return function (...args) {
    if (called) return
    called = true
    return fn.apply(this, args)
  }
}