"You may need an appropriate loader to handle this file type" 使用 Webpack 和 Babel
"You may need an appropriate loader to handle this file type" with Webpack and Babel
我正在尝试使用带有 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.
您需要安装 es2015
预设:
npm install babel-preset-es2015
然后配置babel-loader
:
{
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015']
}
}
确保安装了 es2015 babel preset。
一个例子 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"]
}
更多信息:
如果您使用的 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"]
]
}
使用 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'
]
}
在加载程序数组中 属性。
这个让我想兜风。
Angular7、Webpack
我找到了这篇文章,所以我想感谢这篇文章
https://www.edc4it.com/blog/web/helloworld-angular2.html
解决方法是:
//在你的组件文件上。使用模板,因为 webpack 会将其视为文本
模板:require('./process.component.html')
因果报应来解释它
npm install add html-loader --save-dev
{
测试:/.html$/,
使用:"html-loader"
},
希望这对某人有所帮助
由于更新和更改加班,版本兼容性开始导致配置问题。
你的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 团队更新:
我们非常高兴您尝试使用 ES2015 语法,但团队建议使用 babel-preset-env,而不是继续每年预设。默认情况下,它与以前的预设行为相同,将 ES2015+ 编译为 ES5
如果您使用的是 Babel 版本 7,您将需要 运行 npm install @babel/preset-env 和"presets": ["@babel/preset-env"] 在你的 .babelrc
配置中。
这会将所有最新功能编译为 es5 转译代码:
先决条件:
- Webpack 4+
- 通天塔 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 步: 在 webpack.config.js
存在的项目根路径中创建 .babelrc
文件。
{
"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"
})
]
}
在我的例子中,由于导入路径错误,我遇到了这样的错误:
错误:
import Select from "react-select/src/Select"; // it was auto-generated by IDE ;)
正确:
import Select from "react-select";
您可能忘记为您的文件添加 .js
扩展名。
Component
-> Component.js
这让我觉得很愚蠢,但我想分享给像我一样沮丧的人:我使用了 webpack.dev.js
但没有将其指定为配置文件!当 运行ning Webpack 运行 with:
webpack --config webpack.dev.js
它突然奏效了 ;)
只是添加另一个原因这样的错误出现在 Angular.. 中 是因为我在样式列表中检查了 html 文件:
@Component({
selector: ...,
templateUrls: 'xyz.html',
stylesUrls: ['xyz.html'] // problem
})
寻址错误的文件类型会引发此错误
我正在尝试使用带有 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.
您需要安装 es2015
预设:
npm install babel-preset-es2015
然后配置babel-loader
:
{
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015']
}
}
确保安装了 es2015 babel preset。
一个例子 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"]
}
更多信息:
如果您使用的 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"]
]
}
使用 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'
]
}
在加载程序数组中 属性。
这个让我想兜风。 Angular7、Webpack 我找到了这篇文章,所以我想感谢这篇文章 https://www.edc4it.com/blog/web/helloworld-angular2.html
解决方法是: //在你的组件文件上。使用模板,因为 webpack 会将其视为文本 模板:require('./process.component.html')
因果报应来解释它 npm install add html-loader --save-dev { 测试:/.html$/, 使用:"html-loader" },
希望这对某人有所帮助
由于更新和更改加班,版本兼容性开始导致配置问题。
你的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 团队更新:
我们非常高兴您尝试使用 ES2015 语法,但团队建议使用 babel-preset-env,而不是继续每年预设。默认情况下,它与以前的预设行为相同,将 ES2015+ 编译为 ES5
如果您使用的是 Babel 版本 7,您将需要 运行 npm install @babel/preset-env 和"presets": ["@babel/preset-env"] 在你的 .babelrc
配置中。
这会将所有最新功能编译为 es5 转译代码:
先决条件:
- Webpack 4+
- 通天塔 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 步: 在 webpack.config.js
存在的项目根路径中创建 .babelrc
文件。
{
"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"
})
]
}
在我的例子中,由于导入路径错误,我遇到了这样的错误:
错误:
import Select from "react-select/src/Select"; // it was auto-generated by IDE ;)
正确:
import Select from "react-select";
您可能忘记为您的文件添加 .js
扩展名。
Component
-> Component.js
这让我觉得很愚蠢,但我想分享给像我一样沮丧的人:我使用了 webpack.dev.js
但没有将其指定为配置文件!当 运行ning Webpack 运行 with:
webpack --config webpack.dev.js
它突然奏效了 ;)
只是添加另一个原因这样的错误出现在 Angular.. 中 是因为我在样式列表中检查了 html 文件:
@Component({
selector: ...,
templateUrls: 'xyz.html',
stylesUrls: ['xyz.html'] // problem
})
寻址错误的文件类型会引发此错误