我的 HTML 看起来像这样:
<script type="module" src="script.js"></script>
然后里面
script.js
:
import { moment as mymoment } from "./moment.js";
var a = mymoment('2016-01-01');
但是它说:
Uncaught SyntaxError: import not found: moment
我可以看到它在开发人员控制台 (F12) 中下载
moment.js
文件。我认为它找到了文件,但在文件中找不到moment
模块。
momentjs.com 上有一份关于如何导入 moment.js 的文档。所以肯定支持
import
。但是文档的标题是“Node.js”。我不知道为什么,因为import
是纯JS,我不想使用Node.js。我想使用纯 JavaScript 导入它。
我正在使用 Firefox 102.8.0esr(64 位)和 moment.js 2.29.4。可以在here.
找到 moment.js 文件更新: 我有一个需要最近 moment.js 的网络图表。此网页图表可以嵌入到国外网站。因为国外网站可能已经在使用很旧的 moment.js 版本我需要一个别名。
普通的moment.js(也就是你从momentjs.com下载的普通版)是不支持modules的。我不知道 moment.js 已被永远弃用(这里有官方声明)。这可能是它不支持模块的原因。我将切换到默认支持模块的day.js。
你必须找到正确版本的
esm
并使用cdn(unpkg,esm.sh ...)或下载:
import moment from "https://unpkg.com/[email protected]/dist/moment.js"
console.log(moment)
如果你没有捆绑你的 JS 脚本,你可能需要将 momentjs 作为外部脚本导入,最好从 CDN(cdnjs 或 jsdelivr)
你会在你的 HTML 中有这个:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js" integrity="sha512-CryKbMe7sjSCDPl18jtJI5DR5jtkUWxPXWaLCst6QjH8wxDexfRJic2WRmRXmstr2Y8SxDDWuBO6CQC6IE4KTA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<scrip src="script.js"></script>
并从 script.js 中删除导入语句
见:
评论后更新:
除非您使用将 momentjs 捆绑到您的脚本的模块捆绑器(如 rollup),否则您尝试实现的目标可能无法实现。
CDN 方法可能不是最好的,因为多个 MomentJS 版本它们之间可能会发生冲突。
你可以做的是在注入为你加载它的脚本之前检查 momentjs 是否已经存在于页面上(这会损害你的库的性能),如果它存在你创建一个临时变量并保存以前的参考
moment
然后切换两个变量。这不是最干净的方法,我相信你不想去做。
另一个不相关的评论,如果您不使用任何其他精确需要
momentjs
的库,请考虑使用 DOM 的原生 Intl.DateTimeFormat
,或者使用像 dayjs 这样的轻量级库,因为 MomentJS 现在被 depricated
我用 npm 安装了 moment 包以确保它安装正确 当然,首先我创建了一个非常简单的项目,然后我用 npm init 命令配置了我的包,然后用命令 我安装了
npm i moment
然后删除像 package.json & package.lock.json
这样的文件(我这样做是为了直接从 npm 获取包)
然后你必须像这样在js文件中导入时刻
const moment = require('moment');
var a = moment('2016-01-01');
console.log(a);
现在如果包在你的代码中正确安装 这样导入时刻
const moment = require('moment');
希望我能帮上忙
moment.js
的
浏览器版本不是模块。如果需要别名,可以创建自己的变量
mymoment
。像这样的东西:
const mymoment = moment;
let a = mymoment('2016-01-01');
console.log(a);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
旁白:
moment.js
已弃用,现在有 legacy state.
也许我的dateformat模块有用。