什么是"深度导入"在Angular 4的背景下?

时间:2017-09-27 10:53:54

标签: javascript angular

我知道在升级到Angular 4之前我必须删除所有深度导入,但我不知道什么是深度导入。从字面上看,没有人提到它。它是什么?它看起来怎么样?

2 个答案:

答案 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的目录结构可能经常不维护,甚至不包含在已发布的软件包中。

意外的导入和目录更改

如果不打算在该软件包的范围之外使用某个模块,则开发人员可能会从该软件包中深度导入该模块。更改内部使用的导出名称或软件包的目录结构时,不需要仅用于内部使用的模块的主要版本(重大更改)更新。