holiday-jp / holiday_jp-js Goto Github PK
View Code? Open in Web Editor NEWJapanese holiday.
License: MIT License
Japanese holiday.
License: MIT License
現状、常にWebpackのdevelopmentモードでビルドされているようですが
パッケージとして公開する場合、package.jsonのmainに指定するのはproductionモードで
ビルドされたファイルが一般的かと思われます。
webpack.config.js
module.exports = {
//mode: 'development', //#開発用
mode: 'production',//#公開用
entry: './lib/holiday_jp.js',
// 出力の設定
output: {
filename: 'holiday_jp_webpacked.js',
// 出力先のパス(絶対パスを指定する必要がある)
path: path.join(__dirname, 'scripts')
}
};
https://github.com/holiday-jp/holiday_jp-js/blob/master/lib/holiday_jp.js#L22
この実行によって、祝日データセットの値が date
が文字列型から Date 型の値へ変化する。
between 関数は Date 型に変更してオブジェクトを返す意図があると思われるが、値の変更自体は意図しているでしょうか? 🤔
var holiday_jp = require(".")
holiday_jp.holidays['2010-09-20'].date // '2010-09-20'
var holidays = holiday_jp.between(new Date('2010-09-14'), new Date('2010-09-21'));
holiday_jp.holidays['2010-09-20'].date // 2010-09-20T00:00:00.000Z
何らかの方法で shallow copy ではなく deep copy の処理をすることで、変数が変更される事は避けられそうです。
このライブラリを「再配布を伴う利用」するにあたり、ライセンス文を探しています。
もし可能であれば、このリポジトリにライセンスファイルをあげていただきたいです。
参考情報:
このリポジトリ内から参照していると思われる holiday_jpのプロジェクトにはライセンスファイルを見つけました。
node_moduleとしてインストール
// main.js
var holiday_jp = require("@holiday-jp/holiday_jp");
// "Asia/Tokyo"(+0900) 以外のタイムゾーンで実行すると結果が変化する場合がある
// process.env.TZ = "Asia/Tokyo";
// 元旦
var date = new Date("2022-01-01T00:00:00+0900");
console.log(date.toString());
console.log(holiday_jp.isHoliday(date)); // expected true;
console.log(holiday_jp.between(date, date)); // expected not-empty list
node main.js
sandboxの設定やprocess.env.TZ
の値を変化させ異なるタイムゾーンで実行します
予期した通りの結果が得られました
Sat Jan 01 2022 00:00:00 GMT+0900 (Japan Standard Time)
true
[
{
date: 2022-01-01T00:00:00.000Z,
week: '土',
week_en: 'Saturday',
name: '元日',
name_en: "New Year's Day"
}
]
結果が変わります
Fri Dec 31 2021 15:00:00 GMT+0000 (Coordinated Universal Time)
false
[]
こちらは意図した動作でしょうか?
"YYYY-MM-DD"の文字列表現に変換する関数format
内部で、タイムゾーンに影響される関数 Date#get**
をそのまま利用しているのが原因そうです。
Lines 2 to 4 in f906950
プロジェクトの要件によっては、現在の年月から数年の祝日オブジェクトがあれば要件が満たせる場合があります。
現在、@holiday-jp/holiday_jp npm を利用して webpack などでバンドルした場合 170KB ほどのファイルサイズとなりますが、2022年から2024年までの3年間のみに祝日データを絞った場合 8KB ほどにファイルサイズを低減することが可能となります。
現在 require('@holiday-jp/holiday_jp')
した際に、自動で1970年から2050年までの祝日オブジェクトを生成しているが、指定した年数の祝日オブジェクトを追加可能とする js を作成するのはどうでしょうか?
既存の js を変更すると破壊的な変更となるので、一旦は以下のように require('@holiday-jp/holiday_jp/lib/plain')
などの新たな js の作成を提案します。
以下は利用イメージです。
var holiday_jp = require('@holiday-jp/holiday_jp/lib/plain'); // 読み込み時に全ての祝日オブジェクトの読み込みを行わない
var holidays_2022 = require('@holiday-jp/holiday_jp/lib/holidays/2022');
var holidays_2023 = require('@holiday-jp/holiday_jp/lib/holidays/2023');
var holidays_2024 = require('@holiday-jp/holiday_jp/lib/holidays/2024');
holiday_jp.set_holidays([holidays_2022, holidays_2023, holidays_2024])
var holidays = holiday_jp.between(new Date('2022-09-14'), new Date('2022-09-21'));
console.log(holidays[0]['name']); // 敬老の日
雑に上記の実装をしてみたブランチ (camelmasa@87fa14a) を、利用しているプロジェクトでバンドルしたところ以下のような結果となりました。
169.68KB から 7.5KB
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.