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)
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)
巴贝尔团队更新:
我们非常高兴您尝试使用 ES2015 语法,但团队建议使用 babel-preset-env,而不是继续每年预设。默认情况下,它与之前的预设具有相同的行为,将 ES2015+ 编译为 ES5
如果你使用的是Babel 版本 7,你需要运行 npm install @babel/preset-env并在你的.babelrc配置中有 "presets": ["@babel/preset-env"] 。
这会将所有最新功能编译为es5转译代码:
先决条件:
步骤 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 步:.babelrc在webpack.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)
就我而言,由于导入路径错误,我遇到了这样的错误:
错误的:
import Select from "react-select/src/Select"; // it was auto-generated by IDE ;)
正确的:
import Select from "react-select";
这让我觉得很愚蠢,但我想与像我一样感到沮丧的人分享:我使用webpack.dev.js但没有将其指定为配置文件!运行 Webpack 时运行:
webpack --config webpack.dev.js
Run Code Online (Sandbox Code Playgroud)
它突然起作用了;)
| 归档时间: |
|
| 查看次数: |
186855 次 |
| 最近记录: |