Webpack babel-loader、TypeScript tsconfig 目标、@babel/preset-env 模块之间的 Webpack 摇树设置:false,package.json side-effects:false?
Webpack Tree-Shaking Setup among Webpack babel-loader, TypeScript tsconfig target, @babel/preset-env modules: false, package.json side-effects:false?
如题。这是更长的版本:
我的目标是设置 Webpack 的 tree-shaking 功能(对于 es6-modules,或 ESM,如果你愿意,.ejs
)。
我的困惑在于这些配置:Webpack v5 with babel-loader
(, which can be tuned from webpack.*.config.js
) + Babel v7 with preset @babel/preset-env
(,可以从 babel.config.js
) + TypeScript 调整,可以从 tsconfig.json
调整。详情如下:
首先,从tsconfig.json
开始,我注意到我不明白"target": "es5"
是否应该改为"target": "es6"
,或者这可能无关紧要根本。这是我的推理:
Even if the target set to "es6", the babel-loader
will (probably) further transpile it to "es5" according to the "browserslist"
field I have setup in the package.json
. And for webpack tree-shaking to work, I guess that I should not transpile my code to "es5" too early.
但是这个论点是建立在babel-loader
只会读"browserslist"
,不给tsconfig.json
一个_的基础上的。如有不妥请指正
其次,说说babel。在 babel.config.js
中有一个选项 modules: false
,显然需要它来命令 Babel 不要转译 ESM 导入,这样 tree-shaking 才能工作。所以这为上面的第一个问题提供了更多的上下文:如果我设置 modules: false
,那么它应该意味着 babel-loader
的输入,即 .tsx
的 .js
根据 tsconfig.json
,也不应转译 ESM 导入。如有不妥请指正
最后,关于package.json
和webpack.*.config.js
。选项 sideEffects: false
是 tree-shaking 工作所必需的。但是似乎可以从 package.json
(那么应该是 "side-effects"
的形式)和 webpack.*.config.js
的 babel-loader
的 sideEffects
字段中添加此选项。我实际上还没有测试过哪个会起作用。在这里选择这两个选项有什么建议吗?
还有一个context我只用了babel-loader
,没有用ts-loader
(其实我也不确定这对不对)。这是基于这个论坛的,这是我解决另一个问题时唯一对我有用的方法。如果此问题需要ts-loader
,请告诉我,再次感谢。
My target is to setup the tree-shaking feature [...]
在 webpack 5 上,它在生产模式中默认启用。但是您确实需要保留 ESM 语法才能使其正常工作。如果要在开发模式下启用它,请添加 usedExports: true
.
[...] TypeScript, which can be tuned from tsconfig.json.
[...] or whether this may not matter at all.
如果你不使用 ts-loader
之类的东西,那么答案是(绝对)是,因为 babel 不使用它来决定 tranpilation 目标。
[...] should mean that the input of babel-loader, i.e. the .js
from .tsx
according to tsconfig.json
, should not transpile ESM import too.
正确。
[...] The option sideEffects: false
is required for tree-shaking to work.
不正确。
[...] Any advice on choosing the two options here?
选package.json一个。您可能在 Whosebug 上读了太多帖子,其中有人使用 imaginary 语法。
[...] I only use babel-loader
, no ts-loader
(actually I'm not sure about whether this is correct)
可以。它适合你的情况,因为你的 god-dame neovim 上有 tsserver
,它已经为你做了 cross-file type-checking。但是你仍然应该找时间尝试一下。很多优化好像都是他们做的。
如题。这是更长的版本:
我的目标是设置 Webpack 的 tree-shaking 功能(对于 es6-modules,或 ESM,如果你愿意,
.ejs
)。我的困惑在于这些配置:Webpack v5 with
babel-loader
(, which can be tuned fromwebpack.*.config.js
) + Babel v7 with preset@babel/preset-env
(,可以从babel.config.js
) + TypeScript 调整,可以从tsconfig.json
调整。详情如下:首先,从
tsconfig.json
开始,我注意到我不明白"target": "es5"
是否应该改为"target": "es6"
,或者这可能无关紧要根本。这是我的推理:Even if the target set to "es6", the
babel-loader
will (probably) further transpile it to "es5" according to the"browserslist"
field I have setup in thepackage.json
. And for webpack tree-shaking to work, I guess that I should not transpile my code to "es5" too early.但是这个论点是建立在
babel-loader
只会读"browserslist"
,不给tsconfig.json
一个_的基础上的。如有不妥请指正其次,说说babel。在
babel.config.js
中有一个选项modules: false
,显然需要它来命令 Babel 不要转译 ESM 导入,这样 tree-shaking 才能工作。所以这为上面的第一个问题提供了更多的上下文:如果我设置modules: false
,那么它应该意味着babel-loader
的输入,即.tsx
的.js
根据tsconfig.json
,也不应转译 ESM 导入。如有不妥请指正最后,关于
package.json
和webpack.*.config.js
。选项sideEffects: false
是 tree-shaking 工作所必需的。但是似乎可以从package.json
(那么应该是"side-effects"
的形式)和webpack.*.config.js
的babel-loader
的sideEffects
字段中添加此选项。我实际上还没有测试过哪个会起作用。在这里选择这两个选项有什么建议吗?
还有一个context我只用了babel-loader
,没有用ts-loader
(其实我也不确定这对不对)。这是基于这个论坛的ts-loader
,请告诉我,再次感谢。
My target is to setup the tree-shaking feature [...]
在 webpack 5 上,它在生产模式中默认启用。但是您确实需要保留 ESM 语法才能使其正常工作。如果要在开发模式下启用它,请添加 usedExports: true
.
[...] TypeScript, which can be tuned from tsconfig.json.
[...] or whether this may not matter at all.
如果你不使用 ts-loader
之类的东西,那么答案是(绝对)是,因为 babel 不使用它来决定 tranpilation 目标。
[...] should mean that the input of babel-loader, i.e. the
.js
from.tsx
according totsconfig.json
, should not transpile ESM import too.
正确。
[...] The option
sideEffects: false
is required for tree-shaking to work.
不正确。
[...] Any advice on choosing the two options here?
选package.json一个。您可能在 Whosebug 上读了太多帖子,其中有人使用 imaginary 语法。
[...] I only use
babel-loader
, nots-loader
(actually I'm not sure about whether this is correct)
可以。它适合你的情况,因为你的 god-dame neovim 上有 tsserver
,它已经为你做了 cross-file type-checking。但是你仍然应该找时间尝试一下。很多优化好像都是他们做的。