当前位置: 首页 > 知识库问答 >
问题:

使用汇总绑定时忽略或替换依赖项的导入

呼延源
2023-03-14

我正在使用Rollup绑定一个JS库。这个库依赖于@tensorflow/tfjs-core。

在tfjs的代码中,有一个获取URL的函数。如果它在浏览器环境中,它会使用全局fetch函数;如果不是,它会尝试导入node-fetch

以下几行:

fetch(path: string, requestInits?: RequestInit): Promise<Response> {
  if (env().global.fetch != null) {
    return env().global.fetch(path, requestInits);
  }

  if (systemFetch == null) {
    systemFetch = require('node-fetch');
  }

  return systemFetch(path, requestInits);
}

我的库是在浏览器中运行的,所以它总是使用全局fetch函数。然而,Rollup仍然绑定了my lib的资产中的节点获取

这不应该是一个问题,但一些消费者在使用webpack的React项目中使用库时报告了错误:

未能编译

./node_modules/[my lib]/index。js找不到模块:“节点获取”。确保已安装此软件包。

您可以通过运行:npm install node fetch来安装这个包。

问题是:有没有什么方法可以让我告诉Rollup而不是no bundle?

我想过在包生成后用未定义的替换要求('node-fetch'),但感觉像一个肮脏的黑客。还有其他建议吗?

PS:我相信在消费者项目中将node fetch标记为external可以解决这个问题,但是由于我在lib中不使用node fetch,所以最好将其从最终输出中删除。

共有2个答案

冷浩瀚
2023-03-14

有一个loc用于从bundle中排除节点获取。您可以在汇总配置中考虑类似的方法。(我认为)如果你加上这一点,节点获取将/不应该成为你的小型库的一部分。

贺宜修
2023-03-14

其他包管理器可以根据环境包括或排除文件、test开发生产等。

有很多方法可以实现这一点,甚至可以

# Makefile

ENVIRONMENT ?= test

ROLLUP = $(which rollup)

ENVSUBST = $(which envsubst)

rollup.config.js: src/$(ENVIRONMENT)
    ${ENVSUBST} < $@ > $^
    ${ROLLUP} $^ -o $(ENVIRONMENT).js

如果创建了以环境命名的文件,可以使用

make -e environment=browser

我不希望我的代码能工作,只是为了表达想法。

 类似资料:
  • 我正在开发一个NPM包,它使用rollup绑定并发布到NPM。我想了解一个依赖项是否应该通过汇总绑定,最佳实践是什么。以下是我的逐步分析: > “src”中使用的每个依赖项都应该添加到“deps”或“peerDeps”中 如果您选择只将其放在“peerDeps”中,而不是“deps”,考虑到本地构建目的,最好添加到“devDeps”。否则,您可能必须使用第三方工具在“peerDeps”中安装依赖项

  • 我试图在自定义异常处理程序(用@ExceptionHandler和@ControllerAdvice注释)中的一个方法中返回“ResponseEntity”时遇到问题,我是从“doOnError”(rxjava)调用这个方法的,但我的问题是,当我这样做时,不仅调用了我的方法,还调用了@ControllerAdvice注释类中的另一个@ExceptionHandler,但该类不在我的项目中,而是在我

  • 问题内容: 有什么方法可以强制安装pip python软件包,而忽略所有无法满足的依赖关系吗? (我不在乎这样做有多“错”,我只需要这样做,除了逻辑和推理之外……) 问题答案: 点有一个开关。您应该使用它。 有关更多信息,请运行,在这里您将看到以下行:

  • 我正在以下项目结构中使用Gradle Android实验插件: 设置.分级 Build.Gradle

  • 忽略依赖项的警告 警告:dependency org.apache.httpcomponents:httpclient:4.0.1在调试时被忽略,因为它可能与Android提供的内部版本冲突。如果有问题,请用jarjar重新打包以更改类包警告:dependency org.apache.httpcomponents:httpclient:4.0.1将被忽略以发布,因为它可能与Android提供的内

  • 根据我的理解,clean现在将调用clearVersionProperties,war将调用WriteVersionProperties。 但当我执行分级清洁时,Reactor计划看起来是这样的: 为什么要执行clearVersionProperties和writeVersionProperties任务,因为它们绑定到某些构建阶段?例如,不执行任务infoEnv,而是执行任务writeVersio