将 Webpack 从版本 1 迁移到版本 2
Migration Webpack from version 1 to 2
我想将 webpack 1 配置文件转换为 webpack 2 版本。
另外,我想从包中排除节点模块。
我得到了以下异常
Using removed Babel 5 option: base.modules - Use the corresponding module transform plugin in the plugins
option. Check out http://babeljs.io/docs/plugins/#modules
此外,我得到另一个错误
ERROR in ./index.js
Module parse failed: Unexpected token (9:16)
You may need an appropriate loader to handle this file type.
这些错误似乎提供了很多信息,但我找不到问题所在。
我是否遗漏了迁移指南中的内容?
版本 1
const config = {
entry: './index.js',
output: {
path: '/',
filename: 'bundle.js',
},
devServer: {
inline: true,
port: 8080
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'react']
}
}
]
}
};
module.exports = config;
版本 2
const config = {
entry: './index.js',
output: {
path:'/',
filename: 'bundle.js',
},
devServer: {
inline: true,
port: 8080
},
module: {
rules:[
{
test:/\.jsx?$/,
use:[
{
loader:'babel-loader',
options:{
only:['/node_modules/'],
presets:['es2015', 'react']
},
}
]
}
]
}
};
module.exports = config;
对于 Babel 的第一个错误,您可能有一个仍然使用 Babel 5 的依赖项,并且它包含一个在 Babel 6 中不再允许的配置。这可能是因为您正在尝试转换您的 node_modules
,因为你已经删除了 exclude
选项,它在 webpack 2 中没有改变。Babel 总是使用它能找到的最接近的配置。
对于第二个错误,您正在使用一些需要 Babel 的语法,大概是 JSX。但是你已经在 babel-loader
上设置了 only
选项,它告诉 Babel 仅 转译与给定路径匹配的文件。因此,它仅适用于 node_modules
,不适用于项目的其余部分。这与你想要的完全相反。
您的 .jsx
规则应该是:
{
test:/\.jsx?$/,
exclude:/node_modules/,
use:[
{
loader:'babel-loader',
options:{
presets:['es2015', 'react']
},
}
]
}
您还将 output.path
设置为 /
。那是文件系统的根目录,而不是项目的根目录。使用webpack config所在的目录,可以使用Node的__dirname
,即当前执行文件所在目录的绝对路径(即webpack.config.js
)
output: {
path: __dirname,
filename: 'bundle.js',
},
我想将 webpack 1 配置文件转换为 webpack 2 版本。 另外,我想从包中排除节点模块。 我得到了以下异常
Using removed Babel 5 option: base.modules - Use the corresponding module transform plugin in the
plugins
option. Check out http://babeljs.io/docs/plugins/#modules
此外,我得到另一个错误
ERROR in ./index.js Module parse failed: Unexpected token (9:16) You may need an appropriate loader to handle this file type.
这些错误似乎提供了很多信息,但我找不到问题所在。
我是否遗漏了迁移指南中的内容?
版本 1
const config = {
entry: './index.js',
output: {
path: '/',
filename: 'bundle.js',
},
devServer: {
inline: true,
port: 8080
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'react']
}
}
]
}
};
module.exports = config;
版本 2
const config = {
entry: './index.js',
output: {
path:'/',
filename: 'bundle.js',
},
devServer: {
inline: true,
port: 8080
},
module: {
rules:[
{
test:/\.jsx?$/,
use:[
{
loader:'babel-loader',
options:{
only:['/node_modules/'],
presets:['es2015', 'react']
},
}
]
}
]
}
};
module.exports = config;
对于 Babel 的第一个错误,您可能有一个仍然使用 Babel 5 的依赖项,并且它包含一个在 Babel 6 中不再允许的配置。这可能是因为您正在尝试转换您的 node_modules
,因为你已经删除了 exclude
选项,它在 webpack 2 中没有改变。Babel 总是使用它能找到的最接近的配置。
对于第二个错误,您正在使用一些需要 Babel 的语法,大概是 JSX。但是你已经在 babel-loader
上设置了 only
选项,它告诉 Babel 仅 转译与给定路径匹配的文件。因此,它仅适用于 node_modules
,不适用于项目的其余部分。这与你想要的完全相反。
您的 .jsx
规则应该是:
{
test:/\.jsx?$/,
exclude:/node_modules/,
use:[
{
loader:'babel-loader',
options:{
presets:['es2015', 'react']
},
}
]
}
您还将 output.path
设置为 /
。那是文件系统的根目录,而不是项目的根目录。使用webpack config所在的目录,可以使用Node的__dirname
,即当前执行文件所在目录的绝对路径(即webpack.config.js
)
output: {
path: __dirname,
filename: 'bundle.js',
},