javascript - 如果我使用动态导入功能,Webpack 将无法编译
问题描述
我有一个看起来像这样的函数:
async importer ( path ) {
const maxAttempts = 4;
let p = Promise.reject();
const rejectDelay = reason => {
return new Promise((resolve, reject) => {
setTimeout(reject.bind(null, reason), 1000);
});
};
const attempt = () => {
return new Promise((resolve, reject) => {
import('../../src/pages/desktop/index.jsx').then(data => {
resolve(data);
}).catch(error => {
reject(error);
});
});
};
for(let i = 0; i < maxAttempts; i++) {
p = p.catch(attempt).catch(rejectDelay);
}
p = p.then(data => {
console.log(data);
}).catch(error => {
console.error(error);
});
}
如果我包含导入部分,我的 webpack 将无法编译并最终会崩溃。然后节点给我这个错误:
<--- Last few GCs --->
[1864:00000260CFC24890] 242486 ms: Mark-sweep 1317.0 (1441.8) -> 1301.3 (1441.3) MB, 667.9 / 0.1 ms (average mu = 0.316, current mu = 0.275) allocation failure scavenge might not succeed
[1864:00000260CFC24890] 243400 ms: Mark-sweep 1318.2 (1442.8) -> 1304.5 (1442.8) MB, 662.4 / 0.0 ms (average mu = 0.296, current mu = 0.275) allocation failure scavenge might not succeed
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 000003DB79A50361]
1: StubFrame [pc: 000003DB79A0DEF8]
Security context: 0x0369d989d949 <JSObject>
2: /* anonymous */ [0000035D7180D9D1] [C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\acorn\dist\acorn.js:~4658] [pc=000003DB7C8C0810](this=0x008c53a992d1 <Parser map = 000003D9D2615211>,2)
3: /* anonymous */ [0000035D7180D7D1] [C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\acor...
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 00007FF7DCA221C5
2: 00007FF7DC9FA056
3: 00007FF7DC9FAA40
4: 00007FF7DCE4499E
5: 00007FF7DCE448D7
6: 00007FF7DD11D804
7: 00007FF7DD113444
8: 00007FF7DD111B18
9: 00007FF7DD11B487
10: 00007FF7DD11B506
11: 00007FF7DCCDC311
12: 00007FF7DD436DEA
13: 000003DB79A50361
events.js:167
throw er; // Unhandled 'error' event
^
Error: EOF: end of file, write
at Socket._write (internal/net.js:58:25)
at doWrite (_stream_writable.js:410:12)
at writeOrBuffer (_stream_writable.js:394:5)
at Socket.Writable.write (_stream_writable.js:294:11)
at compilerCallback (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack-cli\bin\cli.js:512:30)
at finalCallback (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack\lib\Compiler.js:204:39)
at hooks.done.callAsync.err (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack\lib\Compiler.js:253:14)
at AsyncSeriesHook.eval [as callAsync] (eval at create (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\tapable\lib\HookCodeFactory.js:32:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\tapable\lib\Hook.js:154:20)
at emitRecords.err (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack\lib\Compiler.js:251:22)
at Compiler.emitRecords (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack\lib\Compiler.js:366:39)
at emitAssets.err (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack\lib\Compiler.js:245:10)
at hooks.afterEmit.callAsync.err (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack\lib\Compiler.js:352:14)
at AsyncSeriesHook.eval [as callAsync] (eval at create (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\tapable\lib\HookCodeFactory.js:32:10), <anonymous>:6:1)
at AsyncSeriesHook.lazyCompileHook (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\tapable\lib\Hook.js:154:20)
at asyncLib.forEach.err (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\webpack\lib\Compiler.js:349:27)
at done (C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\neo-async\async.js:2854:11)
at C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\neo-async\async.js:2805:7
at C:\Users\Rick\PhpstormProjects\witteveen_new_dev\node_modules\graceful-fs\graceful-fs.js:43:10
at FSReqCallback.oncomplete (fs.js:148:20)
Emitted 'error' event at:
at onwriteError (_stream_writable.js:425:12)
at onwrite (_stream_writable.js:456:5)
at Socket._write (internal/net.js:62:14)
at doWrite (_stream_writable.js:410:12)
[... lines matching original stack trace ...]
at FSReqCallback.oncomplete (fs.js:148:20)
奇怪的是,如果我在另一个文件中使用 import 函数,它可以完美地工作,但在这个文件中它就无法工作,webpack 编译器就放弃了。
解决方案
推荐阅读
- tsql - 非常大的表和昂贵的删除操作的数据库优化策略
- warnings - 如何关闭 skimage 警告
- javascript - 当用户删除cookie和页面已刷新时如何保存价值
- javascript - 在 onclick 函数上显示数组递增的元素
- python - Python:将一行的多行拆分为单个(单独)行
- c++ - C++ 复制 c'tor 现在确实采取了行动。不清楚为什么
- angularjs - 在 AngularJS 中处理文件的版本
- node.js - NodeJS MongoDB UNIX 套接字连接
- parse-server - 降级解析服务器
- java - TreeTableView CheckBoxTreeTableCell 中的 ChangeListener 每次单击都会触发多次