web-dev-qa-db-fra.com

Babel 6 transform-runtime: $ export n'est pas une fonction

J'essaie d'incorporer le transform-runtime de Babel pour rendre mon code compatible avec IE9. Mais depuis son intégration, le code ne fonctionnera même pas sur Chrome. J'obtiens l'erreur Uncaught TypeError: $export is not a function sur es6.object.define-property.js:3. Sans la ligne "transform-runtime" dans mon .babelrc, tout fonctionne bien. Des idées?

Voici mon .babelrc:

{
  "plugins": [
    "transform-runtime"
  ],
  "presets": [
    "es2015",
    "react"
  ]
}

Et mon webpack.config.js:

var webpack = require('webpack');

var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');

module.exports = {
  entry: {
    EventAdmin: './src/event_admin',
    EventRender: './src/event_render'
  },
  output: {
    path: '../public/js2',
    filename: '[name].js' // Template based on keys in entry above
  },
  externals: {
    // require("jquery") is external and available
    //  on the global var jQuery
    'jquery': 'jQuery'
  },
  plugins: [commonsPlugin],
  devtool: 'source-map',
  module: {
    loaders: [
      { test: /\.css$/, loader: 'style-loader!css-loader' },
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
    ]
  }
};

enter image description here

38
Ted Avery

Essayez d'ajouter exclude: /node_modules/ après loader: 'babel-loader'. J'ai eu le même problème en essayant d'exécuter le transformateur d'exécution sans exclure node_modules. Je ne suis cependant pas conscient du problème sous-jacent.

46
Pierre Wahlgren

Bonjour, j'ai le même problème et j'ai finalement trouvé une solution qui fonctionne pour moi. Voir:

loaders: [
  {
    test: /.js/,
    loader: 'babel',
    query: {
      presets: ['es2015', 'es2017'],
      plugins: [
        ['transform-runtime', {
          helpers: false,
          polyfill: false,
          regenerator: true, }],
        'transform-es2015-destructuring',
        'transform-object-rest-spread',
        'transform-async-to-generator',
        ],
     },
  },
]

Voir la partie "transform-runtime". J'espère que ça aide.

23
Carlos Galarza

Vous pouvez essayer de remplacer "exclure" par "inclure", en suivant les recommandations de documentation .

Cela a fonctionné pour moi.

{ "test": /\.js/, "loader": "babel", "include": [path.resolve(__dirname, './src')] } .

7
André Moraes

Au début, vous devez installer babel-plugin-transform-runtime, Puis l'utiliser comme moi:

{
  "presets": [
    "es2015",
    "react",
    "stage-0"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

Après cela, vous devez ajouter la clé exclude à votre babel-loader Dans le fichier de configuration webpack:

{
    test: /\.(js|jsx)$/,
    exclude: /node_modules/,
    use: [
        {
            loader: 'babel-loader',
        }
    ]
}

Attention: veuillez écrire /node_modules/ Pas /(node_modules\/)/ ou /node_modules\//, C'est bizarre mais ça marche.

4
AmerllicA

Cela semble être un problème lors de l'exécution de fichiers core-js Via Babel 6 car Babel 6 ne convertit plus require('something') en require('something').default comme Babel 5 l'a fait. J'ai même essayé de l'exécuter via ce plugin https://www.npmjs.com/package/babel-plugin-add-module-exports mais peu importe ce que j'ai fait, cela ne corrigerait pas l'exigence correctement. J'ai finalement dû exclure le core-js Et divers fichiers liés à Babel du traitement par le babel-loader En définissant la propriété exclude sur ceci:

[ /node_modules\/babel-/m, /node_modules\/core-js\//m, /node_modules\/regenerator-runtime\//m ]

En remarque , je n'avais pas réinstallé mon node_modules Depuis la conversion vers Babel 6 et cela a causé le même problème mais pour d'autres raison mystérieuse.

2
Resist Design

Pour ceux d'entre vous qui utilisent Webpack, assurez-vous de ne pas inclure le node_modules dossier avec les éléments suivants dans votre fichier de configuration de webpack:

module: {
  rules: [
    {
      test: /\.js$/,
      // With this line, make sure you only include your javascript
      // source files
      include: [ path.resolve(__dirname, './src') ],
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['env'],
          plugins: ['transform-runtime']
        }
      }
    }
  ]
}
2
ajimix

Avez-vous install aussi le babel-runtime?

J'ai juste installé les deux et ajouté le plugin dans le .babelrc et cela a fonctionné.

1
RMontes13