【问题标题】:react-native : use url.parsereact-native : 使用 url.parse
【发布时间】:2019-03-22 10:53:45
【问题描述】:

我在 react-native 0.54.0 (Expo SDK 26) 中使用来自 node 的 url.parse

const url = require("url");

const { hostname, pathname } = url.parse(props.currentMessage.image);
var extension = pathname.substr(pathname.lastIndexOf(".") + 1);

// determine file URL
const fileURL = `https://${hostname}${pathname}`;

当更新到 SDK 27 并转移到 RN 0.55.2 时,我遇到了这个问题

您试图从“src/modules/xxx/xxx.js”导入 Node 标准库模块“url”。它失败了,因为 React Native 不包含 Node 标准库。阅读更多https://docs.expo.io/versions/latest/introduction/faq.html#can-i-use-nodejs-packages-with-expo

几个问题:

这和我的实现有关吗?

好像和 React-native 有关系,等我更新到 SDK 28、29、30 后会自行解决吗?

是否有任何替代方法可以让我在不添加任何其他依赖项的情况下做同样的事情?

(ps:不需要为这个简单的用例建议依赖项,例如'url'或'whatwg-url',我不会那样做)

【问题讨论】:

    标签: reactjs react-native expo


    【解决方案1】:

    当前的捆绑器实现已禁止所有节点标准库引用。即使它不包括本机实现(在 c++ 中)。

    url 不使用本机实现,但是,您必须将其安装为一个包才能使 React Natives 捆绑器将其理解为依赖项。

    回答您的问题:

    • 是否与我的实现有关?

    是的,不要直接从节点导入

    • [...] 当我更新[...] 时,这会自行解决吗?

    不,这与 React Native 如何打包您的 javascript 并放入您的 .apk.ipa 文件有关。我认为它会在一段时间内改变。

    • 是否有任何替代方法可以让我在不添加任何其他依赖项的情况下做同样的事情?

    是的,复制并粘贴source code 或自行实现。

    【讨论】:

    • 感谢您的宝贵解释。您是否有关于“禁止所有节点标准库引用”的文档或博客公告的链接?我从 0.54 移动到 0.55,在那之前一切都很顺利。为了鼓励其他替代建议,我将让这个问题为其他答案开放一段时间;)
    • 我后来找到了这个链接 docs.expo.io/versions/v27.0.0/introduction/… 所以我最终将 https://www.npmjs.com/package/url 添加到我的 package.json 中,它现在可以工作了。感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多