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

Introduction to dem

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for syumai syumai
October 20, 2019

Introduction to dem

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

Avatar for syumai

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