"你可能需要一个合适的加载器来处理这个文件类型"与Webpack和Babel

egi*_*dra 99 javascript webpack babeljs es6-module-loader

我试图使用Webpack与Babel编译ES6资产,但我收到以下错误消息:

You may need an appropriate loader to handle this file type.
| import React from 'react';
| /*
| import { render } from 'react-dom'
Run Code Online (Sandbox Code Playgroud)

这是我的Webpack配置的样子:

var path = require('path');
var webpack = require('webpack');

module.exports = {
  entry: './index',
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/dist/'
  },
  module: {
    loaders: [
      {
        test: /\.jsx?$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是使用Webpack的中间件步骤:

var webpack = require('webpack');
var webpackDevMiddleware = require('webpack-dev-middleware');
var config = require('./webpack.config');

var express = require('express');
var app = express();
var port = 3000;

var compiler = webpack(config);
app.use(webpackDevMiddleware(compiler, {
  noInfo: true,
  publicPath: config.output.publicPath
}));

app.get('/', function(req, res) {
  res.sendFile(__dirname + '/index.html');
});

app.listen(port, function(err) {
  console.log('Server started on http://localhost:%s', port);
});
Run Code Online (Sandbox Code Playgroud)

我所有的index.js文件都是导入反应,但似乎'babel-loader'无效.

我正在使用'babel-loader'6.0.0.

log*_*yth 84

您需要安装es2015预设:

npm install babel-preset-es2015
Run Code Online (Sandbox Code Playgroud)

然后配置babel-loader:

{
    test: /\.jsx?$/,
    loader: 'babel-loader',
    exclude: /node_modules/,
    query: {
        presets: ['es2015']
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我已安装预设和babel-loader也已安装.它仍然给出了同样的错误 (33认同)
  • @UG_ 你找到解决方案了吗? (2认同)
  • 我们应该配置的“babel-loader”文件在哪里? (2认同)

svn*_*vnm 33

确保已安装es2015 babel预设.

package.json devDependencies的一个示例是:

"devDependencies": {
  "babel-core": "^6.0.20",
  "babel-loader": "^6.0.1",
  "babel-preset-es2015": "^6.0.15",
  "babel-preset-react": "^6.0.15",
  "babel-preset-stage-0": "^6.0.15",
  "webpack": "^1.9.6",
  "webpack-dev-middleware": "^1.2.0",
  "webpack-hot-middleware": "^2.0.0"
},
Run Code Online (Sandbox Code Playgroud)

现在在webpack配置中配置babel-loader:

{ test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ }
Run Code Online (Sandbox Code Playgroud)

.babelrc文件添加到项目的根节点,其中节点模块是:

{
  "presets": ["es2015", "stage-0", "react"]
}
Run Code Online (Sandbox Code Playgroud)

更多信息:


Mr.*_*ter 10

如果您使用的是Webpack> 3,那么您只需要安装babel-preset-env,因为此预设可用于es2015,es2016和es2017.

var path = require('path');
let webpack = require("webpack");

module.exports = {
    entry: {
        app: './app/App.js',
        vendor: ["react","react-dom"]
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, '../public')
    },
    module: {
        rules: [{
            test: /\.jsx?$/,
            exclude: /node_modules/,
            use: {
                loader: 'babel-loader?cacheDirectory=true',
            }
        }]
    }
};
Run Code Online (Sandbox Code Playgroud)

这从我的.babelrc文件中获取其配置:

{
    "presets": [
        [
            "env",
            {
                "targets": {
                    "browsers":["last 2 versions"],
                    "node":"current"
                }
            }
        ],["react"]
    ]
}
Run Code Online (Sandbox Code Playgroud)


khi*_*zer 9

巴贝尔团队更新:

我们非常高兴您尝试使用 ES2015 语法,但团队建议使用 babel-preset-env,而不是继续每年预设。默认情况下,它与之前的预设具有相同的行为,将 ES2015+ 编译为 ES5

如果你使用的是Babel 版本 7,你需要运行 npm install @babel/preset-env并在你的.babelrc配置中有 "presets": ["@babel/preset-env"] 。

这会将所有最新功能编译为es5转译代码:

先决条件

  1. 网络包 4+
  2. 通天塔 7+

步骤 1: : npm install --save-dev @babel/preset-env

Step-2:为了将JSX代码编译为 es5,babel 提供@babel/preset-react了将 reactjsx扩展文件转换为原生浏览器可理解代码的包。

第 3 步: npm install --save-dev @babel/preset-react

第 4 步:.babelrcwebpack.config.js存在的项目的根路径路径中创建文件。

{
  "presets": ["@babel/preset-env", "@babel/preset-react"]
}
Run Code Online (Sandbox Code Playgroud)

第 5 步: webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    mode: 'development',
    entry: path.resolve(__dirname, 'src/index.js'),
    output: {
        path: path.resolve(__dirname, 'output'),
        filename: 'bundle.js'
    },
    resolve: {
        extensions: ['.js', '.jsx']
    },
    module: {
        rules: [{
                test: /\.(js|jsx)$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader'
                }
            },
            {
                test: /\.css$/i,
                use: ['style-loader', 'css-loader'],
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: "./public/index.html",
            filename: "./index.html"
         })
    ]
}

Run Code Online (Sandbox Code Playgroud)

  • 我也非常兴奋的是,您的所有更改给开发人员带来了更多的麻烦。 (19认同)

Pav*_*nyk 6

就我而言,由于导入路径错误,我遇到了这样的错误:

错误的: import Select from "react-select/src/Select"; // it was auto-generated by IDE ;)

正确的: import Select from "react-select";


cod*_*ode 5

这让我觉得很愚蠢,但我想与像我一样感到沮丧的人分享:我使用webpack.dev.js但没有将其指定为配置文件!运行 Webpack 时运行:

webpack --config webpack.dev.js
Run Code Online (Sandbox Code Playgroud)

它突然起作用了;)