Webpack ve Babel ile "Bu dosya türünü işlemek için uygun bir yükleyiciye ihtiyacınız olabilir"


107

ES6 varlıklarını derlemek için Babel ile Webpack kullanmaya çalışıyorum, ancak aşağıdaki hata mesajını alıyorum:

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

Webpack yapılandırmam şöyle görünüyor:

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

İşte Webpack'i kullanan ara katman yazılımı adımı:

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);
});

İndex.js dosyamın yaptığı tek şey react'i içe aktarmak, ancak 'babel-yükleyici' çalışmıyor gibi görünüyor.

'Babel-loader' 6.0.0 kullanıyorum.


1
Bendede aynı sorun var. babel-preset-es2015 yüklendi ve yine de JSX'i bir ReactDOM.render () çağrısında kullanmakla ilgili sorunlar var: s
SomethingOn

Dosyanızın uzantıları nelerdir? Bunlar js dosyaları mı yoksa jsx dosyaları mı? Yükleyiciniz yalnızca jsx uzantılı dosyaları dikkate alır, sorun bu olabilir
cubbuk

Bu bağlantıda sorununuz% 100 çözülecek [ stackoverflow.com/questions/50149729/…
Mehrdad Masoumi

Bu bağlantıda sorununuz% 100 çözülmüş olacak css next.js'ye aktarılacak
Mehrdad Masoumi

Yanıtlar:


87

Ön es2015ayarı yüklemeniz gerekir :

npm install babel-preset-es2015

ve ardından yapılandırın babel-loader:

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

37
Ön ayarlarım var ve babel-yükleyici de kuruldu. Hala aynı hatayı veriyor
Umang Gupta

@UG_ Ayrı bir soru sormanız gerekecek. Yapılandırmanızın tamamını ve hata mesajının tamamını görmemiz gerekir.
loganfsmyth

1
@UG_ çözümü buldunuz mu?
Sarasranglt

35

Es2015 babel ön ayarının kurulu olduğundan emin olun .

Bir örnek 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"
},

Şimdi web paketi yapılandırmanızda babel yükleyiciyi yapılandırın:

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

Düğüm modüllerinin bulunduğu projenizin köküne bir .babelrc dosyası ekleyin :

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

Daha fazla bilgi:


1
. babelrc dosyası eksik olan şey, teşekkürler! Bu öğreticinin tamamı, kabul edilen cevap sizi sadece şimdiye kadar götürüyor.
Mike

Yan bilgi: Seçeneklerdeki "stage-0" dan pek emin değilim (.babelrc olarak da yapılandırılabilir): Bazı özellikler bunu resmi ES Standartlarında yapmayabilir, bu nedenle genellikle daha güvenli olan "stage-3" ü kullanırım.
Christof Kälin

11

Webpack> 3 kullanıyorsanız babel-preset-env, bu ön ayar es2015, es2016 ve es2017 için geçerli olduğundan, yalnızca yüklemeniz gerekir .

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',
            }
        }]
    }
};

Bu, yapılandırmasını dosyamdan alıyor .babelrc:

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

1

Güncellemeler ve fazla mesai değişiklikleri nedeniyle, sürüm uyumluluğu yapılandırmada sorunlara neden olmaya başlar.

Webpack.config.js dosyanızın böyle olması gerekir, aynı zamanda uyumunuzu nasıl azalttığınızı da yapılandırabilirsiniz.

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 değişikliği olduğunu fark etmek için başka bir şey, babel belgelerini okumalısınız https://babeljs.io/docs/en/presets

.babelrc

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

Not: Yukarıdaki @ babel / preset-env & @ babel / preset-react'in package.json bağımlılıklarınızda kurulu olduğundan emin olmalısınız.


1
Eklemek @babel/preset-reactbenim için sorunu çözdü.
kyw

1

BABEL EKİBİ GÜNCELLEME:

ES2015 sözdizimini kullanmaya çalıştığınız için çok heyecanlıyız, ancak ekip yıllık ön ayarlara devam etmek yerine babel-preset-env kullanmanızı tavsiye ediyor. Varsayılan olarak, ES2015 + 'ı ES5'e derlemek için önceki ön ayarlarla aynı davranışa sahiptir.

Babel sürüm 7 kullanıyorsanız , npm install @ babel / preset-env komutunu çalıştırmanız ve "ön ayarlar": ["@ babel / preset-env"] bilgisayarınızda.babelrc yapılandırmanızda .

Bu, tüm son özellikleri es5'e derleyecektir aktarılan koda derler:

Ön koşullar :

  1. Webpack 4+
  2. Babel 7+

Aşama 1: npm install --save-dev @ babel / preset-env

Adım-2:JSX Kodu es5'e derlemek için babel, react'i @babel/preset-reactdönüştürmek için paket sağlarjsx uzantı dosyasını yerel tarayıcı anlaşılır koda .

Adım-3: npm install --save-dev @ babel / preset-react

Adım-4:.babelrc Mevcut olan projenizin kök yolu yolunda dosya oluşturun webpack.config.js.

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

Adım 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 kullanırken:

Benim durumumda, dokümantasyon sayfasından webpack v3.11'in yeni sözdizimini kullandım, web sitelerinden css ve stil yükleyicileri yapılandırmasını kopyaladım. Açıklanan kod (daha yeni API) bu hataya neden olur, aşağıya bakın.

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

Doğru yol şunu söylemektir:

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

yükleyici özelliği dizisinde.


0

Bu beni bir tur attı. Angular 7, Webpack Bu makaleyi buldum, bu nedenle Makaleye atıfta bulunmak istiyorum https://www.edc4it.com/blog/web/helloworld-angular2.html

Çözüm nedir: // bileşen dosyanızda. web paketi onu metin şablonu olarak değerlendireceği için şablonu kullanın: gerekli ('./ process.component.html')

karmanın yorumlaması için npm install html-loader ekle --save-dev {test: /.html$/, şunu kullanın: "html-loader"},

Umarım bu birine yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.