亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

編譯TypeScript時如何處理外部模塊?

編譯TypeScript時如何處理外部模塊?

狐的傳說 2021-10-21 13:29:04
我對 TypeScript 很陌生,我嘗試了很多東西,但在編譯后卻被外部模塊卡住了。我從 Visual Studio Code 中的簡單 TypeScript 項目開始,將目標設置為 ES2015,并將模塊設置為 es2015(因為我想盡可能多地使用本機內容),我想嘗試使用 npm 安裝的強類型事件 (STE)。通過將模塊分辨率更改為node并baseUrl在 中設置tsconfig.json,TypeScript 在使用非相對導入的 STE 時沒有問題:import { SimpleEventDispatcher } from "ste-simple-events";但是,當我編譯 TypeScript 時,生成的 JavaScript 文件具有完全相同的導入語句,并且在加載包含此模塊的 html 時,出現無法找到模塊的錯誤。我不知道如何解決這個問題。TypeScript 應該以某種方式將 import 語句更改為 STE 的確切位置嗎?也許吧,但 TypeScript 團隊表示 TypeScript 編譯永遠不會改變 import 語句中的代碼?;蛘呶覒撘阅撤N方式編譯外部模塊,以便它們包含在輸出中?或者應該在瀏覽器中實現的 ES2015 標準中的默認模塊分辨率來完成這項工作 - 我不知道它是如何工作的,以及應該如何在 JavaScript 中導入外部 ES2015 模塊?任何幫助或朝正確方向的推動將不勝感激。
查看完整描述

1 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

對于任何對此感到頭疼的 TypeScript 初學者來說,答案就是 JavaScript 打包器。

由于我使用的是 ES6,因此我選擇了 RollupJs 捆綁器結合以下插件(按此順序使用它們):

  1. rollup-plugin-resolve - 需要解析 node_modules

  2. rollup-plugin-commonjs - 需要將 node_modules 中的 CommonJS 模塊轉譯為 ES6

  3. rollup-plugin-typescript2 - 可選,您可以在過程中使用它,也可以在運行匯總之前手動使用 tsc - 只需確保使用版本 2(不再維護第一個版本)

  4. rollup-plugin-terser - 壓縮器和混淆器

您可以使用 npm 安裝所有這些: npm install rollup rollup-plugin-resolve rollup-plugin-commonjs rollup-plugin-typescript2 rollup-plugin-terser

添加rollup.config.js到您的項目的根目錄,我的看起來像這樣:


   import typescript from "rollup-plugin-typescript2"

    import commonjs from "rollup-plugin-commonjs";

    import resolve from "rollup-plugin-node-resolve";

    import { terser } from "rollup-plugin-terser";

    import pkg from "./package.json"


    export default {

        input: "./wwwroot/js/svgts.js",

        output: [

            {

                file: pkg.module,

                format: "esm",

            },

        ],

        external: [

            ...Object.keys(pkg.dependencies || {}),

            ...Object.keys(pkg.peerDependencies || {}),

        ], plugins: [

            resolve({

                mainFields: ["module"], // Default: ["module", "main"]

            }),


            commonjs({

                include: "node_modules/**"

            }),


            typescript({

                typescript: require("typescript"),

                tsconfig: "./tsconfig.json"

            }),


            (process.env.NODE_ENV === "production" && terser({

                mangle: { reserved: ['svg'] }

            }))

        ],

    }

Rollup 支持我在這里使用的環境變量: process.env.NODE_ENV === "production"


這允許您創建 npm 腳本package.json以輕松包含或不包含縮小,例如:


"scripts": {

    "tsc": "tsc",

    "tsc:w": "tsc -w",

    "lite": "lite-server",

    "rollup": "rollup -c",

    "rollupw": "rollup -cw",

    "start": "concurrently \"npm run rollupw\" \"npm run lite\"",

    "startprod": "NODE_ENV=production concurrently \"npm run rollupw\" \"npm run lite\"",

    "production": "NODE_ENV=production npm run rollup"

  },

然后你可以在終端中運行npm run production例如構建縮小包。


您可以在每個項目的 GitHub 上找到更多詳細信息。


查看完整回答
反對 回復 2021-10-21
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號