首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Node经常与浏览器有不同的模块系统?

为什么Node经常与浏览器有不同的模块系统?
EN

Stack Overflow用户
提问于 2022-02-28 05:10:15
回答 1查看 105关注 0票数 1

我正在考虑更新Node/Express代码以使用import而不是require,方法是在package.json文件中添加行:

代码语言:javascript
复制
  "type": "module",

但是,我不知道为什么我看到的大多数Node/Express代码仍然使用require,而我通过webpack在浏览器中看到的代码使用导入。

这种二元性有什么原因吗?一般建议升级为进口吗?进口是因为它是新的,被认为是一种升级和更好的技术吗?

这个以前的Q/A已经有7年多的历史了,并且拥有大量的历史信息。我正在寻找更多的最新信息,因为语言已经发展。

EN

回答 1

Stack Overflow用户

发布于 2022-02-28 22:11:01

有两种类型的模块的原因纯粹是历史原因。

早在2009年创建Node.js时,ES模块(import语法)还不存在,但还有其他非标准的替代方案,其中最重要的是AMDCommonJS,可供使用的浏览器有几个。Node.js决定采用CommonJS (require语法)。因此,所有部署到2015年的包都是CommonJS包。

原生ES模块是在ECMAScript 2015标准中引入的,但它们只是在2017年将其作为Node.js 8.5中的一项实验技术,直到2019年的Node.js 12 (2019年),它们的支持才足够好地将它们作为CommonJS的替代品(尽管这是主观的)。因此,为Node.js开发的大部分软件仍然使用带有require语句的CommonJS模块。

ES模块是否更好是一个意见问题,而不是StackOverflow的一个恰当问题。至少,它们是标准的JavaScript,这使得它们适合在浏览器和Node.js中使用,这是imo的一个很大的优势。

缺点是在CommonJS代码中不需要ES模块--相反: ES模块可以导入CommonJS模块--因此,如果您的任何依赖项使用ES模块,那也是将您的代码切换到ES模块的好机会。

那么,我们应该升级到一般使用import吗?当然,这也是一个意见问题。如果这是我的观点,答案将是“不”,因为没有理由改变运行的系统。CommonJS代码不会因为现在存在更好的替代方案而生锈或恶化,尽管ES模块是新代码的更好选择。只要人们使用Node.js,也不会放弃对CommonJS的支持。

有一个名为德诺的项目,该项目旨在为Node.js提供更现代化和安全的替代方案,以便在服务器上运行JavaScript代码。Deno最初被设计为只与ES模块一起工作,但很快就很明显,不支持CommonJS模块是一个主要问题,因为有那么多npm包不起作用,所以它引入了一个兼容模式来支持旗子下的CommonJS模块。这个故事的寓意是:取消对require的支持是个好主意,但是重新添加它是一个更好的主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71290815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档