我知道在升级到Angular 4之前我必须删除所有深度导入,但我不知道什么是深度导入。从字面上看,没有人提到它。它是什么?它看起来怎么样?
答案 0 :(得分:1)
取自How to deal with losing deep imports in Angular 4,深度导入的一个例子:
import { VALID } from '@angular/forms/src/model'
意味着3级深,而现在你只能达到1级:
import { VALID } from '@angular/forms'
如果" VALID"在model
,深入3级。这就是它的全部内容。如果您需要的内容超过" deep",现在应该将其导出到第一级,或者您需要打开一个有角度的票据来导出它。
答案 1 :(得分:1)
我不想宣传自己的要旨,但我向他们解释了here
“深度导入”只是一个ESM导入,其深度比软件包根目录深:
import thingA from 'my-package-name/src/components/thingA'
import thingB from '@my-namespace/my-package-name/src/components/thingA'
如果包名称(package.json:name
键)包含斜杠,则命名空间包不需要进行深度导入:
import thingA from '@my-namespace/my-package-name'
相对导入(./path/to/module
)也不被认为是深度导入,实际上,通过package.json:main
的关键位置(例如src/index.js
),因为这通常会导致循环依赖。
打包程序捆绑包通常用于将项目转换和压缩为分布式单文件版本(即dist/bundle.js
)。尝试从此类软件包进行深度导入的其他软件包会遇到错误,因为来自src
的目录结构可能经常不维护,甚至不包含在已发布的软件包中。
如果不打算在该软件包的范围之外使用某个模块,则开发人员可能会从该软件包中深度导入该模块。更改内部使用的导出名称或软件包的目录结构时,不需要仅用于内部使用的模块的主要版本(重大更改)更新。