遇到了很多错误,但是最后错误的大多在机器上
如果对你有用的话,望来个一键三连^_^
一句话解决方案:找到解析.node文件所需的dll,放到C:\Window\System32,然后你就充满成就感了!
项目中使用到了top-level-await,测试如下所示,
然后打包,没有配置top-level-await解析一般会报这个错。
Top-level await is not available in the configured target environment
然后安装vite-plugin-top-level-await插件,根据大家的经验进行安装,发现报了另外的错误(崩溃!)。
Bindings not found.
Fallback bindings does not support this interface yet.
经历了版本切换、系统切换、源码查看、中英文路径修改、插件更换(似乎目前除了vite-plugin-top-level-await,没有其他插件可以解决top-level-await,有的可以评论~),都不行!
还是从源码上寻找错误的根源,错不是一蹴而就的而是“错错错,都是错”
从源代码的逻辑看必须先解析swc.win32-x64-msvc.node拿到这一堆方法,给到bindings,index.js就用到这个文件暴露出来的方法。
// node_modules\@swc\core\index.js :59:1
const bindings = (() => {
let binding;
try {
binding = !!bindingsOverride ? require((0, path_1.resolve)(bindingsOverride)) : require('./binding');
// If native binding loaded successfully, it should return proper target triple constant.
const triple = binding.getTargetTriple();
assert.ok(triple, 'Failed to read target triple from native binary.');
return binding;
}
catch (_) {
// postinstall supposed to install `@swc/wasm` already
fallbackBindings = require('@swc/wasm');
}
finally {
return binding;
}
})();
// node_modules\@swc\core\index.js :114:3
parse(src, options, filename) {
return __awaiter(this, void 0, void 0, function* () {
options = options || { syntax: "ecmascript" };
options.syntax = options.syntax || "ecmascript";
if (!bindings && !!fallbackBindings) {
throw new Error('Fallback bindings does not support this interface yet.');
}
else if (!bindings) {
throw new Error('Bindings not found.');
}
if (bindings) {
const res = yield bindings.parse(src, toBuffer(options), filename);
return JSON.parse(res);
}
else if (fallbackBindings) {
return fallbackBindings.parse(src, options);
}
throw new Error('Bindings not found.');
});
}
// ————————————————————————————相关代码请看上述源码截图对应位置---
Binding
↓
↓
(翻译:找不到指定模块)
文件路径 swc.win32-x64-msvc.node
为什么找不到?这个文件存在啊,那就是这个文件在这个路径,但是对于swc来说,就跟没存在一样,没读取到,所以提示“The specified module could not be found”
搜索关键字:The specified module could not be found 搜索得结果是这个:
error-the-specified-module-could-not-be-found
所以还是没有完整的dll支持,那就是安装需要的dll。根据文章指引,找到软件Windows 查看 exe 依赖的 dll并且下载对应版本
找到另一台电脑的这个VCRUNTIME140.dll,安装
参考:查看dll依赖的工具 dll缺少解决办法 depends使用
↓
(翻译:不是有效的win32应用程序)
!!!!!经历了没有发现这个模块,模块发现了但是不支持,特殊的模块无法发现。这个模块在win32上不是有效的!找一台有64位,即正常解析swc.win32-x64-msvc.node的win机器,复制dll到没有的那台就可以。另外就是安装所需的dll,其他博文有,这里就不过多阐述了。
参考:https://blog.csdn.net/g313105910/article/details/105531404
相关,但是解决方式应该不一样:https://github.com/swc-project/swc/issues/589
那MacOS上出现这个错误怎么解决?他不用dll啊!(后续研究,有研究玩的可以评论~)
具体问题具体分析,在哪里出现问题在哪里追踪,其他机器可以,那就对比分析,有哪一些要素是出问题机器不具备的。
基于机器的打包需要引用机器本身支持的功能(dll),再深一些,dll是什么?(Windows模块) Liunx上应该是另一种基础和dll一样的东西(Liunx模块?哈哈)
如果对你有用的话,望来个一键三连^_^