Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to dem

syumai
October 20, 2019

Introduction to dem

Deno向けのmodule version manager dem の紹介です
https://github.com/syumai/dem

syumai

October 20, 2019
Tweet

More Decks by syumai

Other Decks in Programming

Transcript

  1. 例 import * as dejs from "https://deno.land/x/dejs/mod.ts"; const body =

    await dejs.render(` <% for (let i = 0; i < 3; i++) { %> Hello, deno! <% } %> `, {}); await Deno.copy(Deno.stdout, body); URL 指定でimport したmodule がそのまま使えます
  2. バージョン管理の解決策 import するURL に直接module のバージョンを含むようにして固定する import * as dejs from

    "https://deno.land/x/[email protected]/mod.ts"; これで最新のmodule しか参照できない問題は解消されます
  3. バージョン更新の解決策 deps.ts などといったファイルに依存モジュールをまとめて、そこからexport す るようにする deps.ts export * as dejs

    from "https://deno.land/x/[email protected]/mod.ts"; export * as fs from "https://deno.land/[email protected]/fs/mod.ts"; example.ts import { dejs } from "./deps.ts"; const body = await dejs.render(` ... deps.ts を更新すれば、 dejs , fs を使っている全ファイル内のmodule version が更新されることになります。
  4. 3. 不要なmodule への依存を持ってしまう deps.ts を使うようにすると、今度は、 dejs にしか依存しないはずの example.ts が fs

    に依存を持つようになってしまいました。 これでは、 example.ts のモジュールとしての独⽴性が失われ、プロジェクト単 位での依存管理に巻き込まれてしまいます。
  5. ファイルの追加 追加したいファイルを vendor からimport するようにTS のファイルを書き換えま す dem ensure すると、⾃動で依存先へのエイリアスを作成します

    下記の例では、 fs/path.ts へのエイリアスを作成しています example.ts import * as path from './vendor/https/deno.land/std/fs/path.ts'; console.log(path.join(Deno.cwd(), 'example')); Resolve module files used in project. $ dem ensure successfully created alias: https://deno.land/[email protected]/fs/path.ts