9か月で独自のCSSプリプロセッサを作成する方法に関するストーリー

私が考えたのは、昨年4月に作業を開始したCSSプリプロセッサーとパーサーです。 なぜそれを始めたのですか? 今自分に正直に告白して、私は言うことができます:私は自分の自転車を発明したかった。 何が私を導いたのですか? 言うのは難しいです。 おそらく同じです。 そしておそらく、お気に入りの開発プラットフォームのCSSプリプロセッサ要件を満たすものが実際に見つからなかったという事実でしょう。



CSSプリプロセッサの要件は、こちらの記事のいずれかを読んだ後に作成しました。 これは、 スタイラスfor Node.jsプリプロセッサに関する記事でした。 実際、これらの「プリプロセッサ」について知りました。 このプリプロセッサのシンタックスの単純さに驚かされました。 Googleからの結果を2日間(またはそれ以下)表示した後、自分にとって興味深いものは見つかりませんでした。 まさにその瞬間に、頭がおかしい思いが思い浮かびました。なぜですか?

次の要件がありました。



実際、おそらくそれだけです。



私は何をしましたか?



開始点から経過したすべての時間、私は自分の製品の開発に費やし、次のものを手に入れました-オープンソースのMySheetライブラリは、パーサーとCSSスタイルのプリプロセッサの両方です。



もちろん、製品のプレゼンテーション用に小さなWebサイトを作成する必要がありました(この目的のためにどのプログラミング言語を選択したかを既に推測しましたか?)。 開発プロセスの興味深い瞬間-ライブラリの作成方法、遭遇した落とし穴、および作成プロセスで学んだことについて-少し後で説明します。 そして今、私のCSSプリプロセッサの機能について。



どうだった...



これまでに達成したことの説明で、私は終わったようです。 そして今、私は開発プロセスをどのように導いたかを伝えたいと思います。仕事、学校、そして最愛の少女の間で、図書館を書きました。





図 1-私の好きな女の子



私がミニプロジェクションを始めた瞬間から、多くの時間が経ちました。 多くの異なる疑わしい状況と質問がありました。 そして、それは驚くことではありません-その前に私はこのようなことをしたことがありませんでした。 コンパイラに関する特別な文献は読みませんでしたが、最初はすべてを独自の裁量で行いました。 私は自慢しませんが、反対に私は無駄ではないと言いました。 おそらく、私は生じた問題のいくつかを避けていただろう。



何らかの理由で、私はすぐにライブラリをオープンソースプロジェクトとして作成することにし、すぐに1つのgithubページでは不十分だと自分に言い聞かせました。ライブラリの一部がすでに作成された後、ウェブサイトの作成を開始しました。それにより、欠陥を見つけてオンラインで修正できるようになりました。また、実際にはエンドユーザーに会えるのがいいとすぐに実感しました。



私は自分のライブラリーの名前を思いつきました。私はこれまでで最も有名なSASSおよびLESSプリプロセッサの例から逸脱しないことに決めました、そして、結局MSSは文字の良い組み合わせだと思いました。そして、その名前を思い出深いものにするために、プロジェクトにMySheetという名前を付けることにしました。そして、略語は(MySheet Styles)に適合し、名前にわずかなハイライトがあります。



名前が発明された、それは船の設計を開始する時間です。私が始めた最初のことは、ソースコードパーサーでした。これは私が初めて誤算した場所です。私は、ソースコードをトークンとキーワードに分解せずにそれを始めました。そして、ライブラリが主に文字列を扱うという事実に導かれました。もちろん、このアプローチの欠点は既に選択の段階で見られましたが、残念ながら、これ以上良いものは思いつきませんでした。その後、大学でコンパイラーのコースを教えたが、予備的な字句解析の段階を導入した方が良いことに気づいた。少なくとも、今はコンパイルされたCSSコードへの後続の出力に対するコメントを認識して記憶する問題に直面しているためです。または、例えば、ここで、予期しない改行とインデント(コードを読みやすくするために追加されることが多い)の存在に対するパーサー拡張機能(追加モジュールとしてライブラリに接続されている)の無反応性を実現したいと思います。近い将来、トークンに侵入する段階をパーサーに含めたいと思います。これは、私の意見では、これらの問題を解決するはずです。



色演算のアイデアは、数式のサポートを実装したときに思い浮かびました。カラーピッカーを開かずに、一致する色を選択できるように、サイトデザインの色を明るくしたり暗くしたりできるといいと思いました。ライブラリは、HSLA、RGBA、HEX、およびHTMLカラー形式で動作するようになりました。これらの形式で指定された各色に、他の色形式のチャンネルのデルタを追加できます。たとえば、#000として記録された色に、255ポイントの青チャネルと40ポイントの緑を追加して、色#0028ffを取得できます。この場合、算術式は#000 + 255b + 40gのようになります。



花を使った作業を実現するために、私は自転車を作り直さず、既存のMrColorライブラリを使用することにしました(ただし、このライブラリは「仕上げ」なしでは実行できませんでした)。



ところで、現時点では、ライブラリの最適化について考えました。コードプロファイラーとして、Webgrindを使用しました。最高のプロファイラーではありませんが、彼は仕事をしていて、私のコードの弱点を見つけるのを大いに助けてくれました。



ひとつおもしろいことがあります。プリプロセッサのパーサーがルールの解析を開始すると、登録されたすべてのモジュールを通過し、大まかに言って、各モジュールで解析メソッドを呼び出します。また、算術式と、たとえば、関数は2つの異なるエンティティであるため、ライブラリは同じものを2回解析する必要がありました。私はそれが本当に好きではなく、ある日私は解決策を思いつきました。算術式のパーサーは、それがまだ式ではなく単純な関数であることを発見すると、falseを返さず、関数のまさにそのオブジェクトを返します。したがって、この欠陥を取り除き、ソースコードを解析するプロセスの生産性を向上させました。



また、私自身の最初のロゴをどのように作成したかについても説明したいと思います。ロゴのアイデアを探して、私は絵の具で描かれた絵に出会い、「千の悪魔!しかし、これは素晴らしいアイデアです!」Photoshopでいくつかの描画のレッスンを見た結果、最終的にそのようなしみができました。





2-マイブロット



私の将来の計画



まず、ソースコードの予備的な内訳をトークンに追加します。次に、ライブラリをさらに開発し、他のプリプロセッサから良いチップを取り出してそれらを私のものに移したいと思います。たとえば、ブラウザプレフィックスの自動追加とルールを継承する機能を実装したいと思います。



次に、スタイルを編集し、バックエンドからMSSコード内のブロックを検索するための機能の開発に取り組みます。たとえば、ソースファイルに直接IEの条件付きコメントのサポートを追加できます(あなたについては知りませんが、IEのパッチを保存し、特に半分のCSSルールの場合はページに個別のファイルとして含める必要があることはいつも悩みました)。



私のプロジェクトを改善するためのアイデアが他にあれば、いつでも喜んで聞いています。



結論の代わりに



おそらく、私のライブラリについての最初の記事で伝えたいことはこれだけでしょう。私は自分の製品を少し宣伝できたと思う。私はまた、いわば、開発のポイントを修正し、すでに行われた作業についてフィードバックを得たいと思っていました。



あらゆるアドバイスや提案に加えて、あらゆる種類のサポートと親切な言葉に感謝します。



あなたが私の記事が好きなら、私は間違いなくもっと書きます。



参照資料



GitHub:https : //github.com/Dobby007/mysheet

公式ウェブサイト:http : //mss.flydigo.com/

ドキュメント:http : //mss.flydigo.com/docs



PS申し訳ありませんが、誰かが気づいたようにコメント-私のホスティングはプレッシャーに耐えられませんでした。これについて考えることさえできませんでした。さて、それについて何かを試してみましょう...



PPS残念ながら、私のホスティングは、サイトに厳しい制限があります(無料のものだけではありません)。そして、彼らは中国のイースターで一度だけリクエストに応答するので、私のサイトのコンテンツに対して他の可能な解決策の方向を見なければなりません。



DNSチェーン全体を更新すると、サイトへのPPPSアクセスが完全に復元されます。これでサイトが利用可能になりました:dobby007_h5a5nu.radius-host.net



All Articles