【问题标题】:"You may need an appropriate loader to handle this file type" with Webpack and Babel使用 Webpack 和 Babel “你可能需要一个合适的加载器来处理这种文件类型”
【发布时间】:2016-02-01 21:10:46
【问题描述】:

我正在尝试使用带有 Babel 的 Webpack 来编译 ES6 资产,但我收到以下错误消息:

You may need an appropriate loader to handle this file type.
| import React from 'react';
| /*
| import { render } from 'react-dom'

这是我的 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/
      }
    ]
  }
}

这是使用 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);
});

我所有的 index.js 文件都在导入 react,但似乎 'babel-loader' 不起作用。

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

【问题讨论】:

  • 我遇到了同样的问题。 babel-preset-es2015 已安装,但在 ReactDOM.render() 调用中使用 JSX 仍然存在问题:s
  • 你的文件的扩展名是什么?它们是 js 文件还是 jsx 文件?您的加载器只考虑带有 jsx 扩展名的文件,这可能是问题
  • 在此链接上,您的问题将 100% 得到解决 [stackoverflow.com/questions/50149729/…
  • 在此链接上,您的问题将 100% 解决css import to next.js

标签: javascript webpack babeljs es6-module-loader


【解决方案1】:

你需要安装es2015预设:

npm install babel-preset-es2015

然后配置babel-loader:

{
    test: /\.jsx?$/,
    loader: 'babel-loader',
    exclude: /node_modules/,
    query: {
        presets: ['es2015']
    }
}

【讨论】:

  • 我已经安装了预设,也安装了 babel-loader。它仍然给出同样的错误
  • @UG_ 你必须提出一个单独的问题。我们需要查看您的整个配置和完整的错误消息。
  • @UG_ 你找到解决方案了吗?
  • 我们应该配置的“babel-loader”文件在哪里?
  • @nix86 babel-loader 是一个 npm 模块,而不是您编辑的文件。
【解决方案2】:

确保您已安装 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"
},

现在在你的 webpack 配置中配置 babel-loader

{ test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ }

.babelrc 文件添加到节点模块所在的项目的根目录中:

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

更多信息:

【讨论】:

  • 。 babelrc 文件是我所缺少的,谢谢!这是完整的教程,接受的答案只能让你到目前为止。
  • Side-info:不太确定选项中的“stage-0”(也可以在 .babelrc 中配置):某些功能可能无法在官方 ES-Standards 中使用,所以我通常使用更安全的“第三阶段”。
【解决方案3】:

如果你使用的是 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',
            }
        }]
    }
};

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

{
    "presets": [
        [
            "env",
            {
                "targets": {
                    "browsers":["last 2 versions"],
                    "node":"current"
                }
            }
        ],["react"]
    ]
}

【讨论】:

    【解决方案4】:

    Babel 团队更新:

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

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

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

    先决条件

    1. Webpack 4+
    2. 通天塔7+

    第一步::npm install --save-dev @babel/preset-env

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

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

    步骤 4: 在您的项目的根路径路径中创建 .babelrc 文件,其中存在 webpack.config.js

    {
      "presets": ["@babel/preset-env", "@babel/preset-react"]
    }
    

    第五步: 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"
             })
        ]
    }
    
    

    【讨论】:

    • 我也非常兴奋,您的所有更改都让开发人员更加头疼。
    【解决方案5】:

    在我的情况下,由于导入路径错误,我遇到了这样的错误:

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

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

    【讨论】:

      【解决方案6】:

      由于更新和更改超时,版本兼容性开始导致配置问题。

      你的 webpack.config.js 应该是这样的,你也可以配置你调整的方式。

      var path = require('path');
      var webpack = require("webpack");
      
      module.exports = {
        entry: './src/js/app.js',
        devtool: 'source-map',
          mode: 'development',
        module: {
          rules: [{
            test: /\.js$/,
            exclude: /node_modules/,
            use: ["babel-loader"]
          },{
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
          }]
        },
        output: {
          path: path.resolve(__dirname, './src/vendor'),
          filename: 'bundle.min.js'
        }
      };
      

      另外需要注意的是args的变化,你应该阅读babel文档https://babeljs.io/docs/en/presets

      .babelrc
      
      {
          "presets": ["@babel/preset-env", "@babel/preset-react"]
      }
      
      

      注意:您必须确保在 package.json 依赖项中安装了上述 @babel/preset-env 和 @babel/preset-react

      【讨论】:

      • 添加 @babel/preset-react 为我修复了它。
      【解决方案7】:

      您可能忘记在文件中添加 .js 扩展名。

      Component -> Component.js

      【讨论】:

      • 不敢相信这是我的问题,创建文档后我没有看到。
      【解决方案8】:

      使用 Typescript 时:

      在我的例子中,我从他们的文档页面中使用了 webpack v3.11 的新语法 我刚刚从他们的网站复制了 css 和样式加载器配置。 注释掉的代码(较新的 API)会导致此错误,见下文。

        module: {
              loaders: [{
                      test: /\.ts$/,
                      loaders: ['ts-loader']
                  },
                  {
                      test: /\.css$/,
                      loaders: [
                          'style-loader',
                          'css-loader'
                      ]
                  }
              ]
              // ,
              // rules: [{
              //     test: /\.css$/,
              //     use: [
              //         'style-loader',
              //         'css-loader'
              //     ]
              // }]
          }
      

      正确的做法是这样写:

          {
              test: /\.css$/,
              loaders: [
                  'style-loader',
                  'css-loader'
              ]
          }
      

      在加载器属性的数组中。

      【讨论】:

        【解决方案9】:

        这个让我兜兜转转。 Angular 7,Webpack 我找到了这篇文章,所以我想感谢这篇文章 https://www.edc4it.com/blog/web/helloworld-angular2.html

        解决办法是: //在你的组件文件上。使用模板作为 webpack 会将其视为文本 模板:require('./process.component.html')

        让因果报应来解释它 npm install 添加 html-loader --save-dev { 测试:/.html$/, 使用:“html-loader” },

        希望这对某人有所帮助

        【讨论】:

          猜你喜欢
          • 2019-05-10
          • 2016-10-22
          • 1970-01-01
          • 2016-09-28
          • 2016-07-13
          • 2017-11-29
          • 2017-01-05
          • 2017-12-15
          相关资源
          最近更新 更多