问题标签 [external-dependencies]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - 如何让 gcc 不对某些“外部标头”中的问题发出警告,但将这些标头作为依赖项包含在内?
几乎不可能尝试提高警告级别,或者在一个大型项目中使用 -Werror,其中有许多团队开发较小的部分,并维护大量遗留代码:总是有太多的警告来自某些属于某些标题的标题使整个事物无法使用的其他组。
每个人似乎都在滥用的 [bad] 解决方法是用 -isystem 替换项目中所有标题但属于“其他一些组”的 -I 标题搜索路径选项......这很糟糕,因为,虽然它避免了迷失在那些“外部头文件”的警告中,这也排除了 gcc 生成的依赖文件中的那些,这可能导致构建系统在更新某些项目头文件时不知道要重新编译什么。
使用 gcc/g++,有没有办法一次完成以下所有操作:
- 从报告警告和包含在依赖项生成中排除真正的系统标头;
- 从报告警告中排除特定目录中的某些项目标头,但仍将它们包含在依赖项生成中;
- 对于所有其他标头:报告警告并将它们包含在依赖项生成中;
同时生成依赖文件并在一个命令中为给定的源 C/C++ 文件构建目标文件?
c++ - Visual Studio - 项目缺少库/链接器问题?
我对大学的项目有疑问。我正在创建一个基于 C++ 的游戏引擎,并添加了 glut 和 SDL 库。我正在使用 Visual Studio 来执行此操作,但是,我的项目似乎有一个问题,可能是链接器。
简而言之,我缺少库,尽管它们显示在显示所有文件的右侧选项卡中。当我运行程序时,VS 放弃了,在 555 错误处停止并告诉我我缺少大部分库。出于某种原因,我什至在项目中缺少一个 , 和类似的基本库。我试着回到以前的项目,但似乎它们也坏了。我不知道该怎么办了。任何帮助/建议都会被应用:)
我和我的 2 位讲师坐下来,我们从项目中删除了 .vs 和调试文件。重新定位解决方案,仍然没有。我们尝试添加所有库,甚至添加了一些更新的库,但仍然出现错误。
我还查看了“外部依赖项”,似乎所有 SDL2 文件都在那里,但基本文件却没有。
build - 如何在 bazel 中获取外部依赖项
我希望 bazel 从 URL 获取外部依赖项。该文件是一个 rpm 文件。我在根目录的 WORKSPACE 文件中添加了这个:
当我尝试:
它说:
基本上它不允许下载 rpm deps。我怎样才能做到这一点?如何下载 rpm 类型的外部依赖项。
r - 向 CRAN 提交具有 CTAN 依赖项的 R 包
我目前正在研究将在几周内提交给 CRAN 的 R 包。该包需要一些乳胶包才能运行。这些乳胶包在 CTAN 上可用,并通过rmarkdown::latex_dependency()
.
这是我实际 knit_print 方法的概念。
我的问题是如何以某种方式指定这些依赖项,以便 CRAN 接受此提交。据我所知,有四种选择
- 按原样提交包,并通过说明文件的文档和
SystemRequirements
字段添加安装说明。 - 在我的 R 包中包含所有必要的乳胶包,并以某种方式使它们可用于客户端的乳胶编译器
- 向tinytex添加一个依赖,它可以自动安装 CTAN 包
- 如果不满足依赖关系,则在安装过程中抛出错误
到目前为止,我使用了选项(1)。
我对 travis (ubuntu 14.04) 的配置是
对于 appveyor(Windows Server 2012 R2 x64),我解压缩miktex-portable.exe
并将其添加到 PATH。然后我得到以下包。
到目前为止我发现了什么
- 使用 google 搜索外部依赖项和 CRAN sumbissions 仅产生有关 C 和 C++ 依赖项的信息,这对我的事业没有帮助。
- 查看一些源代码发现直接
rticles
包含某些.sty
文件,inst/
这让我相信,(2)是正确的答案。但是,rticles
定义了自定义输出格式并且那些不必“安装”乳胶包,因为.sty
文件作为模板的一部分被复制到渲染目录。 - magick使用一个配置文件来阻止安装,以防(系统)依赖项不满足。它还会抛出一条信息性错误消息,指示客户端如何满足依赖关系。
- tinytex 包在提交时没有在 CRAN 上运行任何编译测试。我也不能让tinytex在appveyor上工作
c++ - 使用 CMake(Visual Studio 2015)构建的可执行文件需要 Qt5SVG.dll,但原始 Visual Studio 2015 不需要。为什么?
情况
去年我学到了很多东西,但这是我无法理解的。项目是C++
. 制作1.15.2
。视觉工作室2015
。
我使用cmake-converter转换了整个解决方案*.sln
文件,并为文件中定义的所有外部 s编写了 FindXXX.cmake 模块。*.lib
*.vcxproj
每次我遇到一个我都会在调用中error: unresolved external
添加相应的目标。Sometarget::somecomponent
target_link_libraries(ConsumingTarget ... )
现在我有一个可以工作并且不会产生错误的构建。一些可执行文件会说以下内容:
“无法继续执行代码,因为找不到 somecomponent.dll……”
我有
.sln
生成只需要文件的可执行文件.lib
的原始文件- 生成需要文件
.sln
的可执行文件的 CMake 生成文件.dll
- 工作 FindXXX.cmake 文件
add_library(XXX::yyy UNKNOWN IMPORTED)
- 他们找到标题和
.lib
文件(.dll
文件在原始 VS 中不存在/预期/需要.sln
) .lib
他们为所有文件创建相应的目标
- 他们找到标题和
- 消费目标
target_link_libraries(ConsumingTarget PRIVATE XXX::yyy)
- “一个工作构建”
- “在启动主要功能之前”出现错误。
我试过的
我尝试定义一个 OBJECT 库并将其添加到调用的源中ConsumingTarget
并Sometarget::somecomponent
从target_link_libraries
调用中删除。对象库上的 CMake Doc
我尝试阅读和理解module 和 library之间的区别。即使是有关导入库的 CMake 文档也无法帮助我理解我的问题。
我尝试阅读并理解链接静态库和共享库之间的区别。
我的假设
- 添加导入的库是我做错的。
- 原因:DependenciesGui.exe显示 cmake-generated-executable 和 original-sln-executable 的不同依赖项,但链接器调用(在 VisualStudio 2015 中显示)似乎相同。
- 尽管在此答案中描述的所有级别都激活了标志,但 CMake 文件中的整个程序优化与原始 .sln 文件中的工作方式不同。
- 原因:使用我注意到的原始文件进行编译
warning C4505: 'foobar': unreferenced local function has been removed
- 我似乎没有在 cmake 生成的版本中收到这些警告。 - 子假设:不会调用的函数被优化掉,从而消除了
.dll
文件的必要性。
- 原因:使用我注意到的原始文件进行编译
我期待/希望
ConsumingTarget.exe
不求就跑somecomponent.dll
- 关于导入目标的另一种解释以及如何在不需要
.dll
s 的地方链接库。 - 关于如何分析/比较两个二进制文件的符号(?)并将看到的信息映射到 CMake 命令的说明。(我正在使用DependenciesGui.exe在 .exe 文件中查找依赖项)
失败的可能原因
- 一个可执行文件在使用 cmake-converter 转换后没有 /DELAYLOAD... 指令。打开的问题。问题标题仍然有效。
编辑:1:添加了失败的可能原因
reactjs - 将 React 包含为 webpack 外部结果会导致找不到模块“react”
我正在创建一个包含多个项目中常用组件的 NPM 包。我不想在这个包中捆绑我自己的 react/react-dom,所以我在我的webpack.config.js
:
我还指定了上述两个依赖项,如peerDependencies
我的package.json
我想要发生的是让这个包共享我的父项目(也由 Webpack 处理)具有的 react 依赖项。
但是,当我将包作为依赖项构建父项目时,出现此错误:
我想知道是否有人知道我在哪里出错了?如果有帮助,父项目是 NextJS 应用程序...
编辑:我试图将包包含在标准create-react-app
项目中,这很有效。所以现在我认为这与 NextJS 的服务器端渲染步骤有关?
cmake - CMake 的 FetchContent 与 Makefile 构建的依赖项
我当前的项目需要一个使用 Makefile 构建的库。我想在我的项目编译期间编译这个库;此功能是 FetchContent 的主要卖点,它与 CMake 依赖项配合得非常好。不过,我无法让它与 Makefile 一起使用,也找不到有关如何使用它的示例。
- 是否可以“编译时”执行
make
? - 如果是这样,它可以并行吗?
- 是否可以使用依赖编译库声明导入的目标?
performance-testing - 使用外部依赖项进行性能测试
在微服务世界中进行性能测试(主要谈论负载测试)时,您的应用程序依赖的外部依赖项 (API) 的方法是什么,但不由您的团队拥有/控制。在我的情况下,外部依赖项由同一公司内的团队拥有。那么您会指向相应的“真实”集成非产品端点,还是创建存根并模仿它们的响应时间以尽可能匹配生产?
- 第一种方法示例:您的团队拥有的后端 api 并调用外部 api 来验证客户。您的团队无法控制客户 API,但在运行负载测试时您仍然指向他们的集成测试端点。
- 第二种方法示例:您的团队拥有的后端 api 调用发送静态响应并模仿外部客户 api 的响应时间的存根。
我意识到这两种方法各有利弊,根据测试的目标,一种方法会优于另一种方法。但是你最喜欢的是什么?不一定是上述两者之间的选择。可以是完全不同的。
mime - 将标准化协议 (MIME) 的外部库用作域模型的一部分是否有效?
我目前正在开发一个解析和操作 MIME 消息的应用程序,其中这些消息是域模型的中心部分。尽管目前我已经实现了解析这些消息所需的功能,但似乎没有必要重新发明轮子,我将来是否需要添加额外的 MIME 功能。我可以简单地使用诸如 MimeKit 之类的可用库,它可能更有效地完成这项工作,并且似乎是更强大的方法。同时,我对这个想法犹豫不决,原因有两个:
我对软件架构相当陌生,但从我在网上收集的信息来看,共识似乎是域对象不应具有任何外部依赖项,因为它们对特定于业务的域进行建模。因此,如果业务规则发生变化,让您的域模型依赖于外部库并不是一个好主意。但是,由于 MIME 是一种标准化协议,这应该不是问题,但这导致了第二点。
尽管 MIME 是一种标准化协议,但据我所知,我的应用程序从中接收这些消息的客户端并不总是完全符合 RFC 规范。我还没有遇到关于消息的 MIME 格式的问题,但考虑到这一点,我觉得好像不能保证我不会偶然发现问题。
我可能必须添加有关解析消息的其他自定义功能。然而,这可以通过在导入的类之上添加该功能来解决。
所以我的问题是:
在正常情况下,将标准化协议的外部库用作域模型的一部分是否是一种有效的替代方案?用外部依赖来玷污我的域层和应用层似乎是不对的。
关于我的情况,我应该如何解决这个问题?我是否应该为域模型创建一个接口,以便将来需要时可以将其与另一个实现交换?这将需要隔离类中的外部依赖项并映射所有数据以适应应用层的合同,这似乎比我自己实现协议更多的工作。还是我应该自己实现它并连续添加新功能以确保我完全控制域模型?
我非常感谢您的意见。
javascript - 如何在没有 Node.js 的 IntelliJ typescript 中使用外部依赖项?
我是 TypeScript 的新手,如果这是基本的,很抱歉。
我目前正在 IntelliJ IDEA 2020 中开发一个小型 typescript webapp。我希望它完全在浏览器中运行,我相信这意味着除了编译成 JavaScript 之外,我不能使用 Node 来做任何事情。我还想使用一些外部依赖项,例如 JQuery 和 Plotly,它们可以通过 NPM 以及 CDN 获得,并且具有.d.ts
声明文件。
不幸的是,如果没有 IntelliJ 在编辑器中抱怨、TypeScript 无法编译和/或我的浏览器在尝试运行已编译的 JavaScript 时抛出错误,我无法弄清楚如何使用这些依赖项。现在我得到了前两个:Plotly 是红色的(“找不到名称'Plotly'。”)并且有一个黄色的下划线(“对 UMD 全局的引用”)。我已经下载plotly-latest
并@types/plotly.js
在 Settings > Languages & Frameworks > JavaScript > Libraries 中添加plotly.js
了 Settings > Languages & Frameworks > Node.js 和 NPM,并直接将.d.ts
文件包含在tsconfig.json
. 我错过了什么?
这是我的tsconfig.json
样子(我正在使用 AMD 让我将我的源文件相互导入,但如果我做错了,或者我应该在那里放其他东西,请告诉我):