You need to enable JavaScript to run this app. Node.js的require与HTML的script标签引入依赖有什么区别?
优惠活动
大模型
产品
解决方案
定价
更多

Node.js的require与HTML的script标签引入依赖有什么区别?

script标签引入与Node.js require的核心差异

二者的底层加载机制完全不同,是为不同运行环境设计的两套依赖管理方案,具体区别如下:

  • 适用运行环境不同
    script标签是浏览器原生提供的JS资源加载语法,仅在浏览器环境生效;require是CommonJS规范定义的模块加载语法,仅在Node.js环境原生支持,浏览器默认不支持该语法,需要借助webpack等构建工具编译后才能运行。

    补充:jQuery本身是面向浏览器DOM操作设计的库,Node.js环境没有原生DOM对象,因此几乎不会有人在Node.js中用require引入jQuery使用,这也是你很少看到相关用法的原因。如果需要在Node.js中用类jQuery语法处理HTML内容,可以使用cheerio这类专为Node.js适配的DOM处理库。
    另外你示例中的script标签属性写法有误,正确的资源引入应该使用src属性而非link:

    <script src="jquery.js"></script>
    <script src="example1.js"></script>
    
  • 作用域处理逻辑不同
    所有通过script标签引入的JS代码,都运行在浏览器的全局作用域下:jQuery引入后会把$、jQuery两个变量挂载到window全局对象上,后续引入的example1.js可以直接从全局读取这两个变量使用,不需要额外导入操作。但如果多个引入的脚本存在同名全局变量,会直接出现变量覆盖冲突。
    Node.js中每个JS文件都是独立的模块作用域:通过require引入的依赖默认不会污染全局,导出的内容仅在当前执行require的文件作用域内生效,不同模块的变量完全隔离,不会出现全局冲突问题。
  • 加载执行逻辑不同
    不设置async/defer属性的script标签默认是同步按顺序加载执行,前面的脚本加载执行完成后才会处理后面的标签,因此必须将依赖库放在业务代码前面引入才能生效。
    require是运行时同步加载,可以在代码的任意位置调用加载需要的模块;Node.js会对已加载的模块做缓存,重复require同一个模块不会重复执行模块代码,只会返回缓存的导出结果。
  • 资源查找规则不同
    script标签的资源路径相对当前HTML文件解析,也可以直接填入CDN地址,浏览器会按照HTTP规则请求对应的资源。
    require的路径相对当前JS文件解析,Node.js会按照CommonJS模块查找规则依次检索:优先加载Node.js内置核心模块,其次查找当前目录及上层目录的node_modules文件夹下的第三方模块,最后匹配自定义相对/绝对路径的模块。

内容的提问来源于stack exchange,提问作者chron1cle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 10:36:04