- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读 webpack 文档中有关 tree shaking 的内容时,我遇到了这句话:
In a 100% ESM module world, identifying side effects is straightforward. However, we aren't there just yet.
“100% ESM 模块”是什么意思,它与我们今天使用的当前 import
和 export
有何不同?
引用:https://webpack.js.org/guides/tree-shaking/#mark-the-file-as-side-effect-free
最佳答案
您正在阅读的文档对比了两种类型的脚本:
import
和export
考虑一个大型库,一个将自身安装为全局对象上的命名空间以公开其功能的库。假设 jQuery 做到了这一点——也就是说,它运行类似
const jQuery = (function() {
// lots and lots of code
})();
export default jQuery;
window.jQuery = jQuery;
这包含一个副作用:行
window.jQuery = jQuery;
这意味着您的应用程序的其他部分可以使用 window.jQuery
,而无需专门将 jQuery 导入该模块。例如,您可能有
// someModule.js
export const doStuff = () => {
window.jQuery('div').text('Hi!');
};
这可以在没有线的情况下工作
import jQuery from 'jQuery';
在模块脚本中,因为 jQuery 在窗口上。 (要实现这一点,需要在某处至少一个模块执行 import 'jQuery';
或类似的操作,以便 jQuery 的代码将自身分配给窗口运行)
由于副作用,Webpack 将很难自动摇树 - 你必须 explicitly note哪些模块依赖于有副作用的模块。
相比之下,没有依赖副作用的模块将是上面的someModule.js
示例:它所做的只是导出一个函数 ,无需在其他地方添加或更改功能。
因此,通过“100% ESM 模块”,Webpack 可能指的是所有模块的依赖项都是显式的脚本,带有import
语句,而不是必须依赖副作用(如非导入模块将某些东西分配给窗口)。
关于javascript - 100% ESM 模块世界 - 这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67064875/
第一年+ 我已经使用 esm 和 std/esm 包编写了我所有的代码,我能够无缝地使用 cjs 的依赖包,没有问题,而不需要 babel。 在 nodejs V14 中,混合的 esm/cjs 支持
我在 plunker 中有以下代码... // Thing.js export class Thing{ constructor(){ console.log("This thing is
我尝试使用 --experimental-modules 标志在 Node.js v8.7.0 中使用此语法导入 ESM 模块: import { check, validationResult }
所以我正在使用包 esm 和 module-alias,但似乎 esm 没有注册模块别名的路径。 这是我加载服务器文件的方式: nodemon -r esm ./src/index.js 8081 这
我想将 typescript react 应用程序作为组件捆绑到 ES 模块或 UMD 中。但是生成的 ES 包会产生一个无效的模块 js。 在 bundle 上它给了我这个提示。但我找不到任何解决方
我很好奇 ESM 的 tree-shaking/死代码消除是如何工作的。我在各种 Node.js 项目中使用 Typescript,并开始导出自己的 ESM 包 (tsc --module es201
我正在构建一个 webpack 应用程序,我有兴趣在整个应用程序中使用 ESM,这意味着使用 ESM 导入构建 webpack.config 文件。 我现在可以使用 Babel,但这是在 npm 添加
我想我已经阅读了 SO 上的每个线程以及互联网上的每个相关页面,一切都有一些问题 我想: 使用 webpack 捆绑我的 web 应用程序 在我的源 js 中使用 ES 模块并将它们转换为更广泛的浏览
我即将在 SMPP 上工作。我对从计算机系统到移动站的消息如何传递有基本的了解,我已经阅读了有关消息如何从 ESME 到 SMSC 再到移动站的信息。但实际上我无法理解。我的意思是,这些 (ESME
我有以下示例运行,而 JS 在其上没有捆绑器。 // index.js ;(async () => { const mod = await import('/index.json') cons
在阅读 webpack 文档中有关 tree shaking 的内容时,我遇到了这句话: In a 100% ESM module world, identifying side effects is
在阅读 webpack 文档中有关 tree shaking 的内容时,我遇到了这句话: In a 100% ESM module world, identifying side effects is
我正在开发一个 SMS 网关,我在考虑我应该在其中实现的功能。因此,我查看了一些 SMS 网关(SMSNOW、SMS studio 和 Ozeki)作为示例。 我几乎完成了实现,但我遇到了几乎所有 S
我正在尝试在 ESM 模块上使用 tone.js。 (我可以在带有 bundler 的“commonjs”中毫无问题地使用它) 在我的html中 和 tests.js: import * as To
我正在尝试获取 Esri ArcGis's NPM package与 SvelteKit 一起工作。 根据链接文档,@arcgis/core 应该是 ESM。但是,当我尝试将其导入 SvelteKit
我有以下组件: App.js import React from "react"; import { Slider } from "./Slider"; function App() { retu
当浏览器现在支持原生 ESM 时,为什么开发人员仍然需要使用像 rollup 和 webpack 这样的模块捆绑器 最佳答案 你不需要模块打包器——开发人员甚至在模块和 Webpack 存在之前就能够
我一直在尝试解决这个问题一个星期,但似乎无法真正找到问题所在。 我关注了this tutorial但我没有自己的项目结构(见下图) 在 esm.js 中: require = require("esm
我的设置 Node v14.16.0 我有一个测试文件,其中包含一个用 ESM 模块 (import) 编写的简单测试。 在 package.json我有一个脚本(遵循Jest documentati
我有一个组件库,它将发布到 npm 以供 razzle 应用程序使用。我想要对最佳实践发表意见的主要问题是,这些包应该用 cjs 还是 esm 构建,每个的缺点是什么? 我可以只构建到 cjs 吗?
我是一名优秀的程序员,十分优秀!