MomentJS教程:使用环境

Moment 被设计为在浏览器和 Node.js 中都能工作。

所有的代码都应该在这两种环境中都可以工作,并且所有的单元测试都应该在这两种环境中运行。

CI 系统当前使用以下的浏览器:Windows XP 上的 Chrome,Windows 7 上的 IE 8、9 和 10,Windows 10 上的 IE 11,Linux 上最新的 Firefox,OSX 10.8 和 10.11 上最新的 Safari。

如果您想尝试以下的示例代码,则只需打开浏览器的控制台并输入即可。

Node.js

npm install moment
var moment = require('moment');
moment().format();

注意:在 2.4.0 中,全局的 moment 对象已被废弃。 它将会在下一个主版本中被删除。

浏览器

<script src="moment.js"></script>
<script>
    moment().format();
</script>

Moment.js 在 cdnjs.com 和 jsDelivr 上可用。

Bower

bower

bower install --save moment

值得注意的文件是 moment.jslocale/*.js 和 min/moment-with-locales.js

Require.js

如果你打算将 moment 与 Require.js 结合使用,则强烈建议你阅读此内容。 另外,请升级到 2.14.0 或更高版本以获得最佳体验。

首先,你可能需要通过 bower 或 node_modules 或其他方式将 moment.js 以及语言环境目录放置在基层文件夹中来获取 moment。 然后,你可以使用 adapt-pkg-main 之类的工具、或者手动使用包配置。

requirejs.config({
  packages: [{
    name: 'moment',
    // 此位置是相对于 baseUrl 的。 
    // 选择 bower_components 还是 node_modules 取决于具体的安装方式。
    location: '[bower_components|node_modules]/moment'
    main: 'moment'
  }]
});

通过上述的设置,你可以使用 moment 引入核心模块、使用 moment/locale/de 引入 de 语言环境。

// 只需要核心模块。
define(['moment'], function (moment) {
    console.log(moment().format('LLLL'));  // 'Friday, June 24, 2016 1:42 AM'
});

// 具有单一语言环境的核心模块。
define(['moment', 'moment/locale/de'], function (moment) {
    moment.locale('de');
    console.log(moment().format('LLLL')); // 'Freitag, 24. Juni 2016 01:42'
});

// 具有所有语言环境的核心模块。
define(['moment/min/moment-with-locales'], function (moment) {
    moment.locale('de');
    console.log(moment().format('LLLL')); // 'Freitag, 24. Juni 2016 01:42'
});

// 异步加载语言环境。
define(['require', 'moment'], function(require, moment) {
  // 检测到语言环境之后,在某个模块内部。 
  // 这是在模块加载时间之前不知道语言环境的情况。
  require(['moment/locale/de'], function(localeModule) {
    // 此处已加载语言环境,但尚未使用。
    console.log(moment().format('LLLL'));  // 'Friday, June 24, 2016 1:42 AM'

    moment.locale('de');
    // 已经正确地设置了语言环境之后使用 moment。
    console.log(moment().format('LLLL')); // 'Freitag, 24. Juni 2016 01:42'
  })
});

对于更复杂的用例,请阅读 @jrburke 的出色解释

Moment 仍将会创建全局的 moment,这对于插件和其他第三方代码很有用。 如果需要制止该全局变量,则在模块配置上使用 noGlobal 选项。

require.config({
    config: {
        moment: {
            noGlobal: true
        }
    }
});

如果未指定 noGlobal,则全局导出的 moment 将会打印弃用警告。 从下一个主要版本开始,如果你需要这种行为,则必须自行导出。

对于 2.5.x 版本,如果使用依赖 Moment 但与 AMD 不兼容的其他插件,则可能需要在 r.js 配置中添加 wrapShim: true

为了使 moment.js 插件可以在 requirejs 环境中被加载,moment 会被创建为一个命名模块。 因此,必须使用 paths 来确定目录,将 moment 完全按 "moment" 加载。 使用 "vendor\moment" 之类的路径引入 moment 将会返回 undefined

从 2.9.0 版本开始,moment 会将自身导出为匿名模块,因此,如果仅使用核心模块(不使用语言环境或插件),则将其放置在非标准位置时不需要配置。

NuGet

NuGet / Moment.js

Install-Package Moment.js

meteor

meteor / atmosphere / momentjs:moment

meteor add momentjs:moment

Browserify

npm install moment
var moment = require('moment');
moment().format();

注意,有一个 bug 会导致无法加载 moment.locale

var moment = require('moment');
moment.locale('cs');
console.log(moment.locale()); // en

使用下面的解决方法。

var moment = require('moment');
require('moment/locale/cs');
console.log(moment.locale()); // cs

为了包含所有的语言环境。

var moment = require('moment');
require("moment/min/locales.min");
moment.locale('cs');
console.log(moment.locale()); // cs

Webpack

var moment = require('moment');
moment().format();

默认情况下,webpack 会打包所有的 Moment.js 语言环境(在 Moment.js 2.18.1 中,最小为 160 KB)。 若要剥离不必要的语言环境且仅打包使用的语言环境,则添加 moment-locales-webpack-plugin

// webpack.config.js
const MomentLocalesPlugin = require('moment-locales-webpack-plugin');

module.exports = {
    plugins: [
        // 剥离除 “en” 以外的所有语言环境。
        new MomentLocalesPlugin(),

        // 或者:剥离除 “en”、“es-us” 和 “ru” 以外的所有语言环境。
        //(“en” 内置于 Moment 中,无法移除)
        new MomentLocalesPlugin({
            localesToKeep: ['es-us', 'ru'],
        }),
    ],
};

还有其他资源可以使用 webpack 优化 Moment.js,例如该资源

Typescript 2.13.0+

从 2.13.0 版本开始,Moment 会包含一个 typescript 定义文件。

通过NPM安装。

npm install moment

导入并在你的 Typescript 文件中使用。

import * as moment from 'moment';

let now = moment().format('LLLL');

如果你在导入时遇到麻烦。

对于 Typescript 2.x,则尝试在 tsconfig.json 文件中的 compileOptions 中添加 "moduleResolution": "node",然后使用以下任何语法:

import * as moment from 'moment';
import moment = require('moment');

对于 Typescript 1.x,则尝试在 tsconfig.json 文件中的 compileOptions 中添加 "allowSyntheticDefaultImports": true,然后使用语法:

import moment from 'moment';

语言环境导入

若要使用 moment.locale,则首先需要导入要使用的语言。

import * as moment from 'moment';
import 'moment/locale/pt-br';

console.log(moment.locale()); // en
moment.locale('fr');
console.log(moment.locale()); // en
moment.locale('pt-BR');
console.log(moment.locale()); // pt-BR

System.js

若要加载 moment,则将其放置在 baseURL 配置中的 System.config 指定的路径中。 然后将其导入页面。

如果需要将 moment 加载为全局变量,则可以使用元配置:

System.config({
  meta: {
    'moment': { format: 'global' }
  }
});

另外,若要将 Moment 作为全局仅提供给特定的依赖项,则可以如下操作:

其他

若要在 Java/Rhino 下使用,则参阅这些说明

若要在 Demandware 中使用,则参阅这些说明

作者:terry,如若转载,请注明出处:https://www.web176.com/momentjs/2380.html

(0)
打赏 支付宝 支付宝 微信 微信
terryterry
上一篇 2021年4月7日 下午5:15
下一篇 2021年4月16日 下午6:05

相关推荐

发表回复

登录后才能评论