避免从进口商品中导入代码

时间:2019-01-09 03:24:38

标签: javascript webpack-4 tree-shaking es2017 javascript-import

我正在练习使我的webpack包变小,然后使用webpack的包分析器,我看到一个非常沉重的包包含在两个不同的异步块中,即使它只使用了一次。在深入研究我的代码之后,我意识到这可能是由于以下情况造成的:

file1.js

response = """A
A    
A
B
B
A
A
"""
print(re.sub(r'(.*\n)(\1)+', r'\2', response))

file2.js

A
B
A

file3.js

import { foo } from 'ReallyHeavyPackage'

export function a(): string {
    console.log("called a()");
}

export function b(): string {
    return foo();
}

我假设由于file1全局导入了重包,而file2从file1导入了一个函数,因此即使不导入实际使用该包的函数,它也将重包作为依赖项获取。我希望(或更确切地说,希望)只有file3的块包含了严重的依赖关系,因为它是唯一被使用的地方。

我应该以某种特定方式处理这样的导入吗?也许我可以在webpack中做一个魔术配置来帮助解决这个问题,这是一种更好的结构化模块/功能的方法,或者只是一种更好的导入功能/模块/包的方法?

我正在使用webpack 4,并且正在使用ES2017

2 个答案:

答案 0 :(得分:1)

也许尝试动态导入?

import pyexiv2
image = path_to_image
imageMetadata = pyexiv2.ImageMetadata(image)
imageMetadata.read()
try:
    del imageMetadata['Exif.Image.Orientation']
    imageMetadata.write()
except:
    continue

https://webpack.js.org/guides/code-splitting/#dynamic-imports

答案 1 :(得分:0)

我认为您正在寻找的是Webpack CommonChunksPluginhttps://webpack.js.org/plugins/commons-chunk-plugin/。该插件从不同的包中获取通用块(模块/库),并将它们放入自己的包中。