2015-06-03 23 views
12

Tôi đang sử dụng Webpack với trình tải Babel. Viết theo tiêu chuẩn ES6. Tôi đã cài đặt cả múi giờ và khoảng thời gian với npm.Nhập múi giờ thời gian và phạm vi thời gian bằng gói webpack (Babel/ES6)

Cả hai plugin này đều là plugin moment.js và cả hai đều phụ thuộc vào gói thời điểm và xuất thư viện riêng biệt. Vì vậy, khi tôi làm

import moment from 'moment-timezone'; 
import moment2 from 'moment-range'; 

sau đó tôi nhận được hai tài liệu tham khảo riêng biệt để khoảnh khắc.

Làm cách nào tôi có thể thiết lập để tôi có thể sử dụng thời điểm với chức năng múi giờ và phạm vi?

Cảm ơn!

Trả lời

21

Docs chương CommonJS cú pháp cho việc này:

var moment = require('moment'); 
require('moment-range'); 
require('moment-timezone'); 

// moment() now has both range and timezone plugin features 

Trong ES6:

import moment from 'moment'; 
import 'moment-range'; 
import 'moment-timezone'; 

EDIT

Kể từ moment-timezone không mở rộng nhập khẩu hiện hành nhưng không mở rộng moment chính nó, những gì về điều này?

import moment from 'moment-timezone'; 
import 'moment-range'; 
+0

Tôi không biết liệu câu trả lời của bạn có thực sự khắc phục được sự cố hay không, nhưng dù sao nó cũng hoàn toàn có thể ghi được khi ES6 cũng nhập. – loganfsmyth

+0

Xin cảm ơn @loganfsmyth - đã được khắc phục. – glortho

+0

Đáng buồn thay, nó không hoạt động trong trường hợp này. nhập 'time-timezone'; không sửa đổi "thời điểm" đã nhập trước đó. Tuy nhiên, nhập 'khoảng thời gian'; làm. Vì vậy, vấn đề có vẻ là với gói "múi giờ". Tôi sẽ cung cấp cho bạn một upvote, nhưng không kiểm tra "đúng anwser" –

7

Tôi đã gặp vấn đề này với các gói khác nhau: moment-timezonefrozen-moment. Gốc của tất cả điều ác là có hai phụ thuộc moment ở các phần khác nhau của cây. Trong trường hợp của tôi, tôi đã có moment ngay dưới node_modules và cũng nằm trong số frozen-moment 's node-modules. Điều này có nghĩa là moment-timezonefrozen-moment đang sử dụng các trường hợp moment khác nhau.

Kiểm tra xem bạn có đang sử dụng các phiên bản của các gói tương thích với nhau để moment-range không cần tìm nạp phiên bản khác nhau của moment hay không. Khi bạn có nó một cách chính xác bạn sẽ có thể để làm điều này:

import moment from 'moment'; 
import momentTimezone from 'moment-timezone'; 
import momentRange from 'moment-range'; 

console.log(moment === momentTimezone === momentRange); // logs 'true' 

Hãy ghi nhớ rằng chỉ để thử nghiệm nó đúng cách thiết lập, bạn nên sử dụng nó như thế nào trong câu trả lời glOrtho của:

import moment from 'moment'; 
import 'moment-timezone'; 
import 'moment-range'; 
+0

Tôi không thể nhập [email protected] với [email protected] Tuy nhiên, việc thay đổi thời điểm thành 2.18.1 đã sửa nó cho tôi. Tôi đã sử dụng cú pháp được đề xuất: thời điểm nhập từ 'thời điểm'; nhập 'múi giờ'; nhập 'khoảng thời gian'; –

1

tôi tìm ra việc thực thi mặc định của phạm vi thời điểm khá xấu xí, vì nó chỉ mở rộng đối tượng thời điểm và IMO đó là kinda "hacky".

Đây là cách tôi đang làm nó:

import { default as DateRange } from 'moment-range'; 

const myRange = new DateRange(x, y); 
3

Tất cả các giải pháp trên không làm việc cho tôi và tôi đã phải nhờ đến điều này:

import moment from 'moment'; 
window.moment = moment; 
import {extendMoment} from 'moment-range'; 
extendMoment(window.moment); 

Một chút hacky nhưng công trình .

Các vấn đề liên quan