typescript - 使用 TypeScript 和 Yarn 导入 'namespace/module' 和 import '@namespace/module' 的区别?
问题描述
关于一个不相关的问题,我们想知道来自 Google Firebase 支持的 Doug,如果导入包的不同方式可能是错误的来源。
文档告诉使用 Typescript 和 npm 这样做:
import * as firebase from "firebase/app";
import "firebase/auth";
import "firebase/firestore";
我使用 Yarn 和 Lerna,以及 Typescript 3.9。它要求我使用命名空间/模块语法在导入的开头添加一个 @,否则它会抱怨不是 url 友好的字符。
我用:
import firebase from "@firebase/app";
import "@firebase/auth";
import "@firebase/firestore";
这两个选项实际上是否不同,以至于第二个选项可能会触发第一个选项中不会发生的错误,只是因为这个 @ ?
谢谢
解决方案
两种不同的导入路径意味着两种不同的东西:
import "@firebase/auth"
表示您正在导入@firebase/auth
NPM 包。这意味着包本身在 NPM 中发布为@firebase/auth
import "firebase/auth"
表示您正在从包中导入auth
文件夹firebase
看着@firebase/auth
它说的自述文件
此软件包不适合直接使用,只能通过官方支持的firebase软件包使用。
这似乎支持您应该使用该firebase
包并导入其子文件夹之一的文档。
关于您的另一个问题:您实际上使用了哪个包裹npm install
?
因为如果你使用的是你应该安装的firebase
包,firebase/auth
而不是- 这不是它自己的 NPM 模块 - 或者@firebase/auth
不适合直接使用。
如果您确实安装@firebase/auth
了这将解释为什么 TypeScript 无法在firebase/auth
路径中找到类型,因为这与您安装的包不同。
推荐阅读
- javascript - 如果我不知道参数的数量(JS,Node.js),如何编写函数
- css - 删除 css 包中的注释而不缩小文件
- docker - docker nginx conainter的日志存储在主机中的位置
- php - Symfony 3.4 迁移 - 如何添加捆绑服务?AppExtension 与 config.yml 与 services.yml
- php - 如何单击在 php 中使用 selenium 执行一些 ajax 操作的按钮?
- ios - 在 DispatchGroup 中执行完成处理程序
- excel - 在 VBA (Excel) 中查找函数不会找到最小值
- javascript - 将 { t }(来自 i18n-react)传递给无状态组件时不能使用道具
- django - 修复 AttributeError: 'str' 对象没有属性 'HTTP_201_CREATED'
- php - Google DFP-CreativeService->createCreatives of google ad manager API 时解组错误