无法使用 ES6 语法导入 moment.js

问题描述 投票:0回答:4

我的 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。

javascript momentjs
4个回答
2
投票

你必须找到正确版本的

esm
并使用cdn(unpkg,esm.sh ...)或下载:

import moment from "https://unpkg.com/[email protected]/dist/moment.js"

console.log(moment)

0
投票

如果你没有捆绑你的 JS 脚本,你可能需要将 momentjs 作为外部脚本导入,最好从 CDN(cdnjsjsdelivr

你会在你的 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


0
投票

我用 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');

希望我能帮上忙


0
投票

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模块有用。

© www.soinside.com 2019 - 2024. All rights reserved.