【问题标题】:How to manage Deno dependencies in one place如何在一处管理 Deno 依赖项
【发布时间】:2020-06-20 19:41:33
【问题描述】:

在 Deno 中,可以在 import 语句中对依赖项进行版本控制,并且没有像 npm 这样的 package.json

但是如何在一个地方管理它的 URL 和版本呢?

我将在我的系统中声明多个文件和依赖项。

例如:

dateUtils.ts

import { parseDate } from 'https://deno.land/std@0.50.0/datetime/mod.ts';

const DEFAULT_MASK = "dd-mm-yyyy";

export function parse(date: string): Date {
    return parseDate(date, DEFAULT_MASK);
};

service.ts

import { v4 } from "https://deno.land/std/uuid/mod.ts";

export function process(request: any) {
    const { token } = request;
    const isValid = v4.validate(token);

    console.log(`Token validity: ${isValid}`)

};

app.ts

import { parse } from "./dateUtil.ts";
import * as service from "./service.ts";

const date = parse("20-05-2020");
console.log(date);

const request = {
    token: "408d30e5-1e90-45e3-b299-6520feee6d76"
}
service.process(request)

【问题讨论】:

    标签: deno


    【解决方案1】:

    为了避免在任何可以使用import maps 的地方输入https://deno.land/std/uuid/mod.ts

    // import_map.json
    
    {
       "imports": {
          "http/": "https://deno.land/std/http/"
       }
    }
    
    // server.ts
    import { serve } from "http/server.ts";
    
    const body = new TextEncoder().encode("Hello World\n");
    for await (const req of serve(":8000")) {
      req.respond({ body });
    }
    
    deno run --importmap=import_map.json --allow-net server.ts
    

    导入地图目前不稳定,但您可以在--unstable 标志后面使用它们。


    除此之外,通常会有一个 deps.ts 文件,您将在其中重新导出所有依赖项。

    // deps.ts
    export * as path from "https://deno.land/std@0.51.0/path/mod.ts";
    // other exports .. from
    
    // some other file
    import { path } from './deps.ts' // instead of "https://deno.land/std@0.51.0/path/mod.ts"
    path.basename('/bar/test.txt');
    

    【讨论】:

    • 当项目变得庞大时,deps 约定会出现很大问题。如果您需要来自不同依赖项的相同路径函数怎么办?会出现命名冲突,并且不知道每个函数的来源。
    【解决方案2】:

    deno 中有一个将导入合并到deps.ts 的约定。

    export { parseDate } from 'https://deno.land/std@0.50.0/datetime/mod.ts';
    export { v4 } from "https://deno.land/std/uuid/mod.ts";
    

    然后可以在您的应用程序的其他模块/脚本中导入导出:

    import { v4 } from "./deps.ts";
    import { parseDate } from './deps.ts';
    
    const myUUID = v4.generate();
    parseDate("20-05-2020", "dd-mm-yyyy")
    

    当使用这种方法时,应该考虑integrity checking & lock files

    // Add a new dependency to "src/deps.ts", used somewhere else.
    export { xyz } from "https://unpkg.com/xyz-lib@v0.9.0/lib.ts";
    
    # Create/update the lock file "lock.json".
    deno cache --lock=lock.json --lock-write src/deps.ts
    
    # Include it when committing to source control.
    git add -u lock.json
    git commit -m "feat: Add support for xyz using xyz-lib"
    git push
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2012-02-19
      • 2022-12-05
      • 2014-07-05
      相关资源
      最近更新 更多