Express+EJS项目客户端JS通过CDN引入moment.js失败求助
解决Uncaught ReferenceError: moment is not defined的问题
这个问题的核心原因是你给moment的CDN脚本标签加了type="module",导致moment没有被挂载到全局作用域里,而你的app.js是作为普通脚本执行的,自然找不到全局的moment变量。下面给你两种可行的解决办法:
方法一:移除moment脚本的type="module"属性
直接修改calendar.ejs里的moment引入代码,去掉type="module",这样moment会自动挂载到全局window对象上,app.js就能直接访问到moment了:
<script src="https://momentjs.com/downloads/moment-with-locales.js"></script> <script src="js/app.js"></script>
这种方式最简单,适合你当前的项目结构,不需要改动app.js的代码。
方法二:使用ES模块方式导入(适合现代浏览器)
如果你想保持模块模式的写法,需要做两处修改:
- 给
app.js的脚本标签也加上type="module",因为要使用ES模块的import语法:
<script type="module" src="https://momentjs.com/downloads/moment-with-locales.js"></script> <script type="module" src="js/app.js"></script>
- 在
app.js里明确导入moment:
// app.js import moment from 'https://momentjs.com/downloads/moment-with-locales.js'; // 接下来就可以正常使用moment了 console.log(moment().format('YYYY-MM-DD'));
不过要注意,部分旧浏览器可能不支持ES模块的这种写法,如果你需要兼容旧环境,方法一更稳妥。
另外要确认一点:moment的脚本一定要在app.js之前加载,你当前的写法已经满足这一点,这点没问题。
内容的提问来源于stack exchange,提问作者Major_Ash
相关产品推荐
相关产品推荐

