Ecmascript 6 Webpack 2.0检查是否存在摇晃的ES6模块导入
在Webpack2.0(@2.1.0-beta6)中,如果我要导入一个指向不存在的文件的文件,我会得到一个构建时错误Ecmascript 6 Webpack 2.0检查是否存在摇晃的ES6模块导入,ecmascript-6,webpack,es6-module-loader,Ecmascript 6,Webpack,Es6 Module Loader,在Webpack2.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 } 如果从存在的文件导入不存在的导出,则会出现运行时错误 //x.js i
//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 }
如果从存在的文件导入不存在的导出,则会出现运行时错误
//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']
}
],
}
}
我相信在这种情况下,运行时错误是正确的行为。您可能不会从导入本身获得运行时错误,但只有在尝试使用它时,它才是未定义的 在构建期间,通过系统调用可以轻松确定文件是否存在。然而,导出给定值或不导出给定值的模块可以在运行时更改—这不是一个好主意—因此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就会知道肯定有什么地方出错了。截至
webpack@2.1-beta15
,用于ES6导出的导入。值得将webpack config
文件内容粘贴到此处。请尝试export default module.exports={/*code*/}
@Venky这不正是与module.exports={/*code*/}
相同的吗?你也失去了用CommonJS摇树的能力webpack@2至少,在模块解析中不涉及任何透明。