在Webpack 2.0(@ 2.1.0-beta6)中,如果我要导入一个指向不存在的文件的文件,我会收到构建时错误。
//x.js
import { foo } from './y'
//y.js
export function foo () { return 5 }
如果我从一个存在的文件导入一个不存在的导出,我会收到一个运行时错误。
//x.js
import { baz } from './y'
//y.js
export function foo () { return 5 }
有没有办法让Webpack以与解析文件相同的方式检查导出?
//webpack.config.js
module.exports = {
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015-native-modules']
}
],
}
}
答案 0 :(得分:1)
我认为在这种情况下运行时错误是正确的行为。您可能无法从导入本身获得运行时错误,但只有在您尝试使用它时,它才是未定义的。
在构建期间,系统调用可以轻松确定是否存在文件。但是,导出给定值的模块可以在运行时更改 - 这不是一个好主意 - 因此Webpack不会做出构建时间决定它是否应该挽救。
请考虑以下代码:
// hats.js
var hats = undefined;
if (Math.random() > 0.5) {
hats = 'i have a hat!';
}
export const HATS = hats;
// index.js
import { HATS } from './hats';
console.log('hats is:', HATS}
Webpack在构建时无法知道HATS是否会在运行时存在,因此当我尝试导入hats时它不会出错。但是,HATS将正确地定义为未定义或者我戴帽子!'在执行期间记录。类似地,如果我从hats.js中删除导出行,它将只是总是报告未定义,因为Webpack在转换后无法区分--HATS仍然是未定义的。如果我完全删除hats.js,Webpack就会知道某些内容肯定是错误的并且出错了。
答案 1 :(得分:0)
从webpack@2.1-beta15
开始,warnings have now been added用于导入ES6导出。