簡體   English   中英

要求JS / AMD外部模塊分辨率

[英]RequireJS/AMD external module resolution

在為我的應用創建的任何模塊中,我可以輸入以下內容:

import ko = require("knockout");

然后,我有一個可以使用的ko對象。

如果我編寫自己的模塊,例如/app/services/I18n.js ,則必須使用以下路徑導入它:

import i18m = require("services/I18n");

我想知道Knockout模塊做了什么才能使之成為可能,所以我可以這樣做。 我期待它是一些有關Knockout.d.ts附帶Knockout.TypeScript.DefinitelyTyped ,我只是不知道是什么。

我嘗試在main.ts我的RequireJS配置中添加一個配置項:

requirejs.config({
    baseUrl          : "/app",
    urlArgs          : "bust=" + (new Date()).getTime(),
    paths            : {
        "text"       : "lib/requirejs-text/text",
        "durandal"   : "lib/durandal/js",
        "plugins"    : "lib/durandal/js/plugins",
        "transitions": "lib/durandal/js/transitions",
        "knockout"   : "lib/knockout.js/knockout",
        "jquery"     : "lib/jquery/jquery",
        "uuid"       : "lib/node-uuid/uuid",
        "bootstrap"  : "lib/bootstrap-sass-official/javascript/bootstrap",
        "I18n"       : "services/I18n"
    }
});

但這不是Visual Studio或ReSharper所“注意到”的,因此沒有任何效果(我不清楚它是否在運行時起作用)。

其長短之處在於我不清楚如何找到模塊。 總是按文件名嗎? 路徑有什么意思嗎? *.d.ts是否有特殊規定? 感覺就像魔術在繼續。

TypeScript模塊的分辨率有點混亂。 Brocco對*.ts文件中的本地模塊的回答是正確的。 TS不會讀取require tsconfig.json有一個新的tsconfig.json文件(我認為從v1.5開始),您可以在其中為編譯器提供配置。 如果您希望像說Visual Studio這樣的knockout模塊那樣識別i18n模塊,則需要在*.d.ts文件中聲明它們-在TS語言中,這是環境聲明。 聲明文件的特殊之處在於,您必須注意不要從這些文件中的頂層導出任何內容,否則TS會用無意義的錯誤消息轟炸您-因此不允許頂層export ,而是您只聲明什么TS應該理所當然。 這是此用例的示例文件:

// i18n.d.ts
interface I18n {
    // Your module's TS interface
    translate(key: string): string;
}

declare var i18n: I18n;

declare module "i18n" {
    export = i18n;
}

這將告訴TS編譯器,存在一個名為i18n的頂級模塊,該模塊將在使用指定接口進行編譯后出現。 編譯為AMD模塊后,您需要提供以下信息,以在配置中的運行時找到該模塊:

// require.config.js
requirejs.config({
    // ...
    paths            : {
        // ...
        // Tell require.js where to find your module
        "I18n"       : "services/I18n"
    }
});

這是我正在使用的設置,希望對您有所幫助。

ko本身並沒有完成什么特別的事情,它與如何解析/找到包有關。 引用本地/內部模塊時,應在其./加上./以便模塊解析知道在哪里查找。

至於ko(和其他npm軟件包),它將遍歷文件夾結構,直到找到package.json文件,然后從那里遍歷所有依賴項。 並且在每個依賴項中,它將查看其package.json主字段/屬性以確定要加載的文件/模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM