You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express+EJS项目中Moment.js CDN客户端引入失败求助

解决Uncaught ReferenceError: moment is not defined错误

你遇到的问题核心在于ES模块的作用域隔离机制:你给moment的CDN脚本标签加了type="module",这会让它以ES模块模式运行,模块内部的变量默认不会挂载到全局window对象上;而你的app.js是普通脚本,它试图访问全局作用域里的moment变量,自然就会抛出未定义的错误。

下面给你几个可行的解决方案:

方案一:移除moment脚本的type="module"属性(最简单直接)

修改calendar.ejs里的moment引入代码,去掉type="module",这样moment会自动把自身挂载到全局window对象,app.js就能正常访问到:

<body>
  <!-- ... 其他页面内容 ... -->
  <script src="https://momentjs.com/downloads/moment-with-locales.js"></script>
  <script src="js/app.js"></script>
</body>

方案二:将app.js也改为ES模块(符合现代前端规范)

如果你想保留模块开发方式,需要把app.js也声明为模块,然后通过import引入moment:

  1. 修改calendar.ejs的脚本引入:
<body>
  <!-- ... 其他页面内容 ... -->
  <script type="module" src="js/app.js"></script>
</body>
  1. 在app.js顶部添加导入语句(建议使用支持ES模块的moment CDN链接,比如cdnjs的稳定版本):
import moment from 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment-with-locales.min.js';

// 接下来即可正常使用moment
console.log(moment().format('YYYY-MM-DD'));

方案三:本地引入moment.js(避免CDN依赖问题)

如果担心CDN访问不稳定,也可以直接下载moment文件到本地项目:

  1. 下载moment-with-locales.js文件,放到public/js目录下;
  2. 修改calendar.ejs的引入路径:
<body>
  <!-- ... 其他页面内容 ... -->
  <script src="js/moment-with-locales.js"></script>
  <script src="js/app.js"></script>
</body>

额外排查小技巧

如果按上述方法仍未解决,可以打开浏览器开发者工具(F12):

  • 切换到Network标签,刷新页面,检查moment脚本是否成功加载(状态码应为200);
  • 切换到Console标签,确认是否有其他加载错误提示,比如CDN链接失效、文件路径拼写错误等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:00:19