gpt4 book ai didi

javascript - Webpack 没有在我的 JS 文件中捆绑所有函数

转载 作者:行者123 更新时间:2023-11-30 09:14:56 25 4
gpt4 key购买 nike

我最近将 Webpack 集成到我的项目中,以便为我网站上的 JS 文件构建 bundle 。解决了一些小问题后,我就可以构建 bundle 了。在浏览器中检查后,其中一个 Javascript 代码引发了以下错误。

enter image description here

检查后,我意识到 addComment.moveform 导致了问题。

enter image description here

所以,我检查了生成的包,发现变量 addComment 的定义还没有被推送到包中。如下所示的 Javascript 不会被捆绑是有原因的吗?没有 Webpack 抛出错误?

 /**
* 'Comment Reply' to each comment.
* This script moves the Add Comment section to the position below the appropriate comment.
* Modified from Wordpress https://core.svn.wordpress.org/trunk/wp-includes/js/comment-reply.js
* Released under the GNU General Public License - https://wordpress.org/about/gpl/
*/
var addComment = {
moveForm: function(commId, parentId, respondId, postId) {
var div,
element,
style,
cssHidden,
t = this,
comm = t.I(commId),
respond = t.I(respondId),
cancel = t.I("cancel-comment-reply-link"),
parent = t.I("comment-replying-to"),
post = t.I("comment-post-slug"),
commentForm = respond.getElementsByTagName("form")[0];

if (!comm || !respond || !cancel || !parent || !commentForm) {
return;
}

t.respondId = respondId;
postId = postId || false;

if (!t.I("sm-temp-form-div")) {
div = document.createElement("div");
div.id = "sm-temp-form-div";
div.style.display = "none";
respond.parentNode.insertBefore(div, respond);
}

comm.parentNode.insertBefore(respond, comm.nextSibling);
if (post && postId) {
post.value = postId;
}
parent.value = parentId;
cancel.style.display = "";

cancel.onclick = function() {
var t = addComment,
temp = t.I("sm-temp-form-div"),
respond = t.I(t.respondId);

if (!temp || !respond) {
return;
}

t.I("comment-replying-to").value = "0";
temp.parentNode.insertBefore(respond, temp);
temp.parentNode.removeChild(temp);
this.style.display = "none";
this.onclick = null;
return false;
};

/*
* Set initial focus to the first form focusable element.
*/
document.getElementById("comment-form-message").focus();

/*
* Return false so that the page is not redirected to HREF.
*/
return false;
},

I: function(id) {
return document.getElementById(id);
}
};

最佳答案

这可能是因为死代码消除 a.k.a. tree shaking :如果 Webpack 注意到一个特定的函数没有被使用,它就会把它留下来生成一个更小的包。但是 Webpack 只知道 从 JavaScript 调用的函数,而不是从用 HTML 硬编码的事件处理程序调用的函数。

解决此问题的最简单方法是遵守 Webpack 的规则,并改为通过 JavaScript 附加事件处理程序。对于 various reasons 来说,这无论如何都是更好的做法.

如果您需要将数据传递给事件处理程序(就像您在这里所做的那样),您可以使用 data attributes在元素上读出事件处理函数中的数据。

关于javascript - Webpack 没有在我的 JS 文件中捆绑所有函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55742524/

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