gpt4 book ai didi

javascript - 为什么要使用 WebPack?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:06 26 4
gpt4 key购买 nike

我花了几天时间来启动和运行 Webpack,并且刚刚进行了测试。但是我发现从 webpack 出来的 bundle.js 文件做了很多对我来说没有意义的不必要的事情。

索引.js

import greet from './greet';

console.log("I'm the entry point");
greet();

问候语

function greet() {
console.log('Have a great day!');
};

export default greet;

super 简单。但是 bundle.js

!(function(e) {
var t = {};
function n(r) {
if (t[r]) return t[r].exports;
var o = (t[r] = { i: r, l: !1, exports: {} });
return e[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;
}
(n.m = e),
(n.c = t),
(n.d = function(e, t, r) {
n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });
}),
(n.r = function(e) {
"undefined" != typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
Object.defineProperty(e, "__esModule", { value: !0 });
}),
(n.t = function(e, t) {
if ((1 & t && (e = n(e)), 8 & t)) return e;
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
var r = Object.create(null);
if (
(n.r(r),
Object.defineProperty(r, "default", { enumerable: !0, value: e }),
2 & t && "string" != typeof e)
)
for (var o in e)
n.d(
r,
o,
function(t) {
return e[t];
}.bind(null, o)
);
return r;
}),
(n.n = function(e) {
var t =
e && e.__esModule
? function() {
return e.default;
}
: function() {
return e;
};
return n.d(t, "a", t), t;
}),
(n.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t);
}),
(n.p = ""),
n((n.s = 0));
})([
function(e, t, n) {
"use strict";
n.r(t);
var r = function() {
console.log("Have a great day!");
};
console.log("I'm the entry point"), r();
}
]);

WebPack 似乎做了很多对我来说毫无意义的不必要代码。 bundle.js 的文件大小也是 index.js 和 greet.js 的 3 倍。对于如此简单的东西,该应用程序的开发构建看起来也非常困惑和困惑。

那么我为什么要继续花时间在我的项目中使用 WebPack 呢?它输出的所有额外代码是什么,为什么会在那里?是否有任何更好的替代方案可以帮助我从模块化开发环境发布代码?

非常感谢您帮助我理解为什么我应该或不应该使用 WebPack。

谢谢!

最佳答案

The bundle.js is also 3 times larger in file size than the index.js and greet.js

Webpack 必须为浏览器无法处理的事情添加一些 polyfill,例如模块加载。如果您有 2 行代码,这些 polyfill 看起来很重,但是如果您编写数千行代码,您将不会注意到任何显着的开销,因为这些 poyfill 只添加一次。

So why should I continue to invest time into using WebPack for my projects?

因为它会为较大的项目生成较小的包,而且它允许您编写 ESnext 和干净的模块化代码。

What is all the extra code it is outputting and why is it there?

它保持全局范围干净,添加一些助手和模块加载器,然后加载第一个模块:

// IIFE to keep global scope clean, ! to prevent Automatic Semicolon Insertion fun
!(function init(modules) {
var cache = {}; // cache the modules results
// All modules are in an array, their index is a unique identifier
function require/*n*/(index/*r*/) {
if (cache[index]) return cache[index].exports;
var context/*o*/= (cache[index = { index/*i*/: index, loaded/*l*/: false/*!1*/, exports: {} });

modules[index].call(
context.exports,
context,
context.exports,
require
);
context.loaded = true /*!0*/;
return context.exports;
}

require.modules = modules; // I'm not sure why?...
require.cache = cache;

// helper for adding a getter
require.addGetter /*n.d*/ = function(object, key, getter) {
require.has(object, key) || Object.defineProperty(object, key, { enumerable: true, get: getter });
});

require.prepareExport /*n.r*/ = function(export) {
if("undefined" != typeof Symbol && Symbol.toStringTag)
Object.defineProperty(export, Symbol.toStringTag, { value: "Module" });

Object.defineProperty(export, "__esModule", { value: true });
};

// I have no idea what that is doing

require.startModule /*n.s*/ = 0;
require(require.startModule); // start execution
})([
/* Your modules, identified by index */
function mainModule(context, exports, require) {
"use strict"; // better performance
require.prepareExport(export); // as you could override exports in your module, this has to be called afterwards

var otherModule = function() { // inlined!
console.log("Have a great day!");
};

console.log("I'm the entry point"),

otherModule();
} /* ... more modules would follow here if not inlined */
]);

Are the any better alternatives that will help me ship my code from a modular development environment?

有替代品,不确定它们是否“更好”。

关于javascript - 为什么要使用 WebPack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55260903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com