【发布时间】:2019-06-30 17:05:54
【问题描述】:
考虑下面这段 html 代码:
<html>
<head>
<script language="JavaScript1.5">
// sdk code
// root_scripts
// component1 code
// component2 code
</script>
</head>
<body>
<h2>simple page</h2>
Hi world
<div id="root"></div>
</body>
</html>
component1 code 和 component2 code 行可能只是不同 js 文件的 2 个包含,或者实际上是 2 段 javascript 代码,我不在乎。
我试图了解在同一页面中可以隔离多少 2 段代码。例如,假设component1 code 包含 jquery,component2 code 包含 react js,并且我包含的 2 个特定版本具有特定库。这意味着一个组件可能会破坏另一个组件,并且它们不会被完全隔离。
假设两个组件都必须访问这个 html 中的 dom 元素(所以 iframe 并不是一个真正的选择,我猜),有没有一种好方法可以为每段代码创建一个完全隔离的 java 脚本“环境” ?就像 2 个不同的作用域,它们有自己的导入并且它们不能相互冲突,但仍然能够成为同一个 html 页面的一部分?
【问题讨论】:
-
“完全孤立”是什么意思?只有一个全局上下文,所以如果你需要隔离,你需要正确地确定你的代码范围,而不是接触到全局上下文。此外,在 HTML5 注释中,
<script>表示它是 javascript。您不添加type=,并且您绝对不使用Javascript 1.5。唯一支持的两个值是module和javascript,其他任何值都是没有意义的(在 HTML 规范意义上)并且不会做任何事情。您也不要使用language:这是一个已弃用的属性,并且是 1998 年 HTML 风格的延续。 -
那是公平的,我只是举了一个例子html来说明,整个html可以改变,我什至不需要
script标签。通过隔离,我的意思是使用不同的 java 脚本依赖项拥有 2 段独立的代码。所以想象一下,假设 jquery 1.2 和 jquery 1.3 不兼容,我将使用 jquery 1.2 创建组件 1 和使用 jquery 1.3 创建组件 2。我的代码很容易隔离,它在我的控制之下。依赖项不是。 -
这听起来像你在描述包,它们将所有代码包装在它们自己的执行上下文中,这样它们就不会进入任何可能加载到你页面上的东西(其他)。目前在 JS 领域有几个流行的打包器,事实上不可避免的一个是 webpack(通常带有 babel),专用的 es6+ 打包器是 rollup。我建议您访问他们的网站并阅读他们让您做什么。
-
要明确 - 这些捆绑包是用于客户端部分的吗?运行在浏览器中的js,不是nodejs什么的,对吧?
-
正确。您为客户端(=浏览器)部署构建捆绑包。
标签: javascript html web-component isolation