【问题标题】:Difference between import 'namespace/module' and import '@namespace/module' with TypeScript and Yarn?使用 TypeScript 和 Yarn 导入 'namespace/module' 和 import '@namespace/module' 的区别?
【发布时间】:2020-12-14 23:16:04
【问题描述】:

an unrelated question 上,我们与来自 Google Firebase 支持的 Doug 一起想知道,导入包的不同方式是否可能是错误的来源。

文档告诉使用 Typescript 和 npm 这样做:

import * as firebase from "firebase/app";
import "firebase/auth";
import "firebase/firestore";

我在 Typescript 3.9 中使用 Yarn 和 Lerna。它要求我使用命名空间/模块语法在导入的开头添加一个 @,否则它会抱怨不是 url 友好的字符。

我用:

import firebase from "@firebase/app";
import "@firebase/auth";
import "@firebase/firestore";

这两个选项是否真的不同,以至于第二个选项可能会触发第一个选项中不会发生的错误,只是因为这个 @ ?

谢谢

【问题讨论】:

    标签: typescript firebase npm yarnpkg lerna


    【解决方案1】:

    两个不同的导入路径意味着两个不同的东西:

    1. import "@firebase/auth" 表示您正在导入 @firebase/auth NPM 包。这意味着包本身在 NPM 中发布为@firebase/auth
    2. import "firebase/auth" 表示您正在从firebase 包中导入auth 文件夹

    查看上面写的@firebase/auth自述文件

    此包不适合直接使用,只能通过官方支持的firebase 包使用。

    这似乎支持您应该使用 firebase 包并导入其子文件夹之一的文档。

    你的other question:你实际上是哪个包npm install

    因为如果您使用的是 firebase 是您应该安装的,而不是 firebase/auth - 它不是它自己的 NPM 模块 - 或 @firebase/auth 不适合直接使用。

    如果您确实安装了 @firebase/auth,这将解释为什么 TypeScript 无法在 firebase/auth 路径中找到类型,因为这与您安装的包不同。

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多