javascript - Webpack 不会从另一个文件内联 const
问题描述
我有一个包含一些时间计算的文件。为了“干燥”,在它的顶部有一个
const HOUR_MS = 60 * 60 * 1000
在转译的输出中,每次HOUR_MS
出现都内联36e5
.
到目前为止,一切顺利^_^
但!如果我将此 const 提取到它自己的文件中,因为我想在更多地方重用它,这将不再有效。
相反,转译后的输出现在具有对该 const 的引用(例如r.HOUR_MS
),这意味着它没有尽可能地缩小。
这是故意的行为(也许我可以用一些标志来抑制)还是优化疏忽?(正要报告,但他们的 GitHub 错误模板建议我先在这里问)
解决方案
这种现象是有问题的,但是由于多个层 (2) 一起工作以产生输出,所以这个壮举是不可行的。
这是因为import
和export
行为不同于CommonJS
。无论如何,import
andexport
都是通过引用(即使是原始变量),而CommonJS
不会操纵导出的值(因此,原始值不会被引用)。
证明import
并export
通过参考:
1.ts
export let number = 10;
export function increase() {
number++;
}
2.ts
import {number, increase} from './1';
console.log(number);
increase();
console.log(number);
日志将打印 10, 11
第 1 层:TypeScript
转译器
const number = 10;
console.log(number);
将转换为:
const number = 10;
console.log(number);
但
export const number = 10;
console.log(number);
将转换为:(这是问题开始的地方)
Object.defineProperty(exports, "__esModule", { value: true });
exports.number = 10;
console.log(exports.number);
第 2 层:uglify-es
const number = 10;
console.log(number);
将压缩到
console.log(10);
但
Object.defineProperty(exports, "__esModule", { value: true });
exports.number = 10;
console.log(exports.number);
将压缩到:(这是问题结束的地方)
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.number = 10;
console.log(exports.number);
这就是为什么如果没有层之间的任何共同标准,这种优化将永远无法工作。
推荐阅读
- swift - Firebase - iOS 应用程序在首次安装时卡在启动屏幕上
- java - 在 JSP 中打印列表对象
- go - 使用功能选项而不是方法
- amazon-web-services - AWS Cloudformation:如何使用用户名作为标签
- html - SwiftUI:VStack 中视图之间的重叠
- ansible - Ansible - 从剧本中导入 group_vars all.yml
- reactjs - 无法为 Chartjs 工具提示生成所需的 UI 输出
- python - 通过 jupyter notebook 发出运行终端命令
- compression - LZ4 为不同的语言提供不同的压缩数据
- python - 获取任何可以旋转的正多边形的点