「このファイルタイプを処理するには、適切なローダーが必要になる場合があります」WebpackとBabel


106

ES6アセットをコンパイルするためにBabelでWebpackを使用しようとしていますが、次のエラーメッセージが表示されます。

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ファイルが実行しているのは、インポート反応ですが、「babel-loader」が機能していないようです。

'babel-loader' 6.0.0を使用しています。


1
私も同じ問題を抱えています。babel-preset-es2015がインストールされていますが、ReactDOM.render()呼び出しでJSXを使用する際に問題があります:s
SomethingOn

ファイルの拡張子は何ですか?それらはjsファイルですか、jsxファイルですか?ローダーはjsx拡張子の付いたファイルのみを考慮するため、問題になる可能性があります
cubbuk

このリンクでは、あなたの問題は、[100%に解決されるstackoverflow.com/questions/50149729/...を
Mehrdad Masoumi

このリンクでは、問題は100%解決されたcssのnext.jsへのインポートです
Mehrdad Masoumi

回答:


86

es2015プリセットをインストールする必要があります:

npm install babel-preset-es2015

次に設定しますbabel-loader

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

37
プリセットをインストールし、バベルローダーもインストールしました。それでも同じエラーが発生します
Umang Gupta

@UG_別の質問をする必要があります。設定全体と完全なエラーメッセージを確認する必要があります。
loganfsmyth 2016

1
@UG_解決策を見つけましたか?
Sarasranglt 2017

34

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"]
}

より詳しい情報:


1
。babelrcファイルは欠落していたものです。ありがとうございます!これは完全なチュートリアルであり、受け入れられた答えは今のところあなたを得るだけです。
マイク、

補足情報:オプションの "stage-0"についてはよくわかりません(.babelrcで構成することもできます):公式のES標準では一部の機能が機能しない可能性があるため、通常はより安全な "stage-3"を使用します。
ChristofKälin2017

11

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"]
    ]
}

1

時間の経過による更新と変更により、バージョンの互換性が構成の問題を引き起こし始めます。

あなたの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の変更に気づくもう1つのことです。バベルのドキュメントhttps://babeljs.io/docs/en/presetsを読んでください。

.babelrc

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

注:上記の@ babel / preset-envと@ babel / preset-reactがpackage.json依存関係にインストールされていることを確認する必要があります


1
追加して@babel/preset-react修正しました。
kyw

1

バベルチームの更新:

ES2015の構文を使用することに非常に興奮していますが、毎年のプリセットを継続する代わりに、babel-preset-envを使用することをお勧めします。デフォルトでは、ES2015 +をES5にコンパイルするための以前のプリセットと同じ動作をします

Babelバージョン7を使用している場合は、npm install @ babel / preset-envを実行し、.babelrc構成に"presets":["@ babel / preset-env"]を含める必要があります。

これにより、すべての最新の機能がes5でコンパイルされたコードにコンパイルされます。

前提条件

  1. Webpack 4+
  2. バベル7+

ステップ-1::npm install --save-dev @ babel / preset-env

ステップ-2:JSX es5にコードをコンパイルするために、babelは@babel/preset-react反応jsx拡張ファイルをネイティブブラウザーの理解可能なコードに変換するパッケージを提供します。

ステップ-3: npm install --save-dev @ babel / preset-react

ステップ-4:存在する.babelrcプロジェクトのルートパスパス内にファイルを作成しますwebpack.config.js

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

ステップ-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"
         })
    ]
}


0

Typescriptを使用する場合:

私の場合、ドキュメントページからwebpack v3.11の新しい構文を使用しました。CSSとスタイルローダーの構成をWebサイトからコピーしました。コメントアウトされたコード(新しい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'
        ]
    }

ローダープロパティの配列内。


0

これは私にスピンを投げます。Angular 7、Webpackこの記事を見つけたので、記事を信用したいと思い ますhttps://www.edc4it.com/blog/web/helloworld-angular2.html

ソリューションとは://コンポーネントファイル上。テンプレートを使用すると、webpackはそれをテキストテンプレートとして扱います:require( './ process.component.html')

カルマがそれを解釈するためにnpm install add html-loader --save-dev {test:/.html$/、use: "html-loader"}、

これが誰かを助けることを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.