使用TypeScript和Yarn导入“名称空间/模块”和导入“ @名称空间/模块”之间的区别?

时间:2020-08-26 07:41:24

标签: typescript firebase npm yarnpkg lerna

an unrelated question上,我们想知道Google Firebase支持的道格(Doug)是否会以不同的方式导入软件包,从而导致漏洞。

文档使用Typescript和npm来做到这一点:

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

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

我使用:

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

这两个选项实际上是否有所不同,以至于第二个选项可能会因为第一个@ @触发在第一个选项中不会发生的错误?

谢谢

1 个答案:

答案 0 :(得分:1)

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

  1. RichTextBox rtb = ... rtb.AppendText("Hello", FontStyle.Italic); rtb.AppendText("World", Color.Red); rtb.AppendText("!", FontStyle.Bold); 表示您正在导入import "@firebase/auth" NPM软件包。这意味着程序包本身在NPM中发布为@firebase/auth
  2. @firebase/auth意味着您正在从import "firebase/auth"包中导入auth文件夹

看看它说的@firebase/auth自述文件

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

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

输入您的other question:您实际上firebase是哪个包裹?

因为如果您使用的是npm install软件包 ,那么应该安装而不是firebase(不是它自己的NPM模块)或{{1} },不适合直接使用。

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