我正在构建将存在于AWS Lambda中的REST API。我使用apex来部署它,因为我正在使用JavaScript实现它,所以我使用webpack和babel来获得我的ES6 +好吃的东西。我发现了一个与@providesModule
名称有关的问题,我无法解决此问题。如何突破@providesModule缓存
我刚刚创建了一个新的lambda函数,当我编译它时,我可以从输出中看到一个模块找不到 - 但另一个可以。以下是文件系统的草图:
functions
├─ database.js @providesModule Database -- this works
├─ configuration.js @providesModule MyConfig -- this does not work
├── entity-post
├── index.js imports both 'Database' & 'MyConfig'
当我编译拉姆达,输出指示MyConfig
依赖不能得到解决,但Database
可能。我试过用死简单的代码替换configuration.js
的内容,以防在解析失败时出现基本的分析错误;没有运气。我应该补充说,我在同一个项目中有5个使用类似导入的lambda函数,并且它们都很好。
我认为这是某种缓存问题:模块解析系统没有注意到configuration.js
中的@providesModule
。
如何清除缓存?对于这个问题,哪一部分软件甚至可以处理这些解决方案?我尝试过在网上寻找,但是不清楚@providesModule
的识别是一个webpack的东西,还是一个babel的东西,还是一个webpack-babel-loader的东西,或者只是一个节点v5的东西。
我已经做了大量的挖掘,包括在线和在我的项目代码库中。以下是我所学到的:
几乎所有在线看到的关于@providesModule
的链接都是关于反应或反应原生项目。这是因为Facebook的工具 - 特别是HasteMap(我认为)是反应原生包装套件的一部分 - 明确增加了对@providesModule
的支持。我的项目既没有反应,也没有反应,并且在构建过程中没有使用任何Facebook工具。我的项目使用webpack v1.14和babel v6.22来构建源代码。
我发现了错误信息的WebPack的源代码中,在./node_modules/webpack/lib/dependencies/WebpackMissingModule.js
:
exports.moduleCode = function(request) {
return "var e = new Error(" + JSON.stringify("Cannot find module \"" + request + "\"") + "); " +
"e.code = 'MODULE_NOT_FOUND'; " +
"throw e;";
};
的WebPack似乎对以这种方式声明模块名称脚本的一个术语:“标记模块”。 webpack源代码中有几个脚本处理带标签的模块,但我无法确定识别模块中标签的代码。我的假设是问题存在于填充模块注册表的系统部分,并且我发现的标记模块代码似乎都与访问(已填充的)注册表中的那些模块有关。
很难在webpack的源代码中进一步追踪这些内容,这很可理解,并且分布在bajillion文件中。
任何帮助解决此问题的帮助,或链接到相关文档或框架代码,显示如何处理@providesModule
,赞赏。我想了解为什么我的新模块没有解决,所以我可以解决这个问题。如果我的缓存理论不在基地,那很好。
我假设你正在使用[fbjs](https://www.npmjs.com/package/fbjs)。我对吗? –
@fumi_hwh不是。 “我的项目既没有反应也没有反应,并且在构建过程中没有使用任何Facebook工具。”没有找到结果。 -iname“* fbjs *”'。 – Tom
然后我不明白你如何使用'@ providesModule'。也许问题是为什么'import'Database''工作。 –