使用Vite创建Typescript库,导致项目中导入错误:“TypeError: au.release is not a function”

问题描述 投票:0回答:1

问题:。 错误从何而来? 如果库中发生额外的导入,为什么会出现这种情况? 如何在其他项目中导出自定义库而不破坏项目 - 可以运行? 请注意,这是我的第一个库,我正在创建很多未知的东西。我相信问题在于我的 ts、vite 或 pck 中的配置不正确,但如果是这样,则不确定是哪一部分。

问题描述:当我导入自定义库时,代码无法编译并给出错误消息。查看编译后的代码时,这似乎是在执行

<tag>.release().split(".")
(6 个实例)或
au.release().toLowerCase().includes("microsoft")
(1 个实例)时显示的。

"TypeError: au.release is not a function"

if (process.platform === "win32") {
  var Au = au.release().split(".");
  return Number(process.versions.node.split(".")[0]) >= 8 && Number(Au[0]) >= 10 && Number(Au[2]) >= 10586 ? Number(Au[2]) >= 14931 ? 3 : 2 : 1;
}

在导入的项目中可以看到。 从外观上看,它仅在库具有使用来自其他第 3 方库的 import 语句的函数时才会出现

在下面的代码块中,如果我从 vite 导出这个函数 不过,我肯定会得到这个错误(前面提到过) 库本身将毫无问题地编译和构建。我看不到 有什么问题吗?

import axios from "axios";

export async function dosAttack(
  url: string,
  qty: number,
  ms: number
): Promise<{ err: number; pass: number }[]> {
  const result: { err: number; pass: number }[] = [];

  for (let time = 0; time < qty; time++) {
    const requests = [];
    let err = 0;
    let pass = 0;

    for (let attack = 0; attack < qty; attack++) {
      requests.push(
        axios
          .get(url)
          .then(() => pass++)
          .catch(() => err++)
      );
    }

    await Promise.all(requests);
    console.log({ err, pass });
    result.push({ err, pass });
    await new Promise((resolve) => setTimeout(resolve, ms));
  }

  return result;
}

VS Code 中的问题: enter image description here

我尝试了多种设置,但不确定是否有任何真正有意义。下面的函数可以正常工作,没有任何问题,尽管它们没有安装任何第三个依赖项。 enter image description here]2

package.json、vite.config.ts、tsconfig.json中的配置:

vite.config.ts

// vite.config.js
import { resolve } from "path";
import { defineConfig } from "vite";
import dts from "vite-plugin-dts";
import viteTsconfigPaths from "vite-tsconfig-paths";

const packageName = "qa-library";

export default defineConfig({
  base: "",
  plugins: [
    viteTsconfigPaths(),
    dts({
      insertTypesEntry: true,
    }),
  ],
  build: {
    lib: {
      entry: resolve(__dirname, "src/index.ts"),
      name: packageName,
      fileName: "index",
      formats: ["es", "cjs"],
    },
    emptyOutDir: false,
  },
  resolve: {
    alias: {
      lib: "/src",
      enums: "/src/enums",
      interface: "/src/interface",
      service: "/src/service",
    },
  },
});

tsconfig.json

{
  "compilerOptions": {
    "target": "ESNext",
    "lib": ["ESNext"],
    "types": ["vite/client", "node"],
    // "allowJs": false,
    "skipLibCheck": true,
    // "esModuleInterop": false,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "CommonJS",
    "moduleResolution": "Node",
    "resolveJsonModule": true,
    // "isolatedModules": true,
    "noEmit": true,
    "baseUrl": "./",
    "paths": {
      "@/*": ["./src/*"],
      "lib/*": ["./src/*"],
      "enums/*": ["./src/enums/*"],
      "interface/*": ["./src/interface/*"],
      "service/*": ["./src/service/*"]
    }
  },
  "include": ["./src"],
  "exclude": ["node_modules"]
}

package.json

{
  "name": "qa-library",
  "private": false,
  "version": "0.1.303",
  "type": "module",
  "exports": {
    ".": {
      "import": "./dist/index.js",
      "require": "./dist/index.cjs",
      "types": "./dist/index.d.ts"
    }
  },
  "main": "./dist/index.cjs",
  "module": "./dist/index.js",
  "typings": "./dist/index.d.ts",
  "files": [
    "/dist/*"
  ],
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "@rollup/plugin-typescript": "^8.5.0",
    "@types/node": "^18.18.5",
    "prettier": "2.6.2",
    "rollup-plugin-typescript-paths": "^1.5.0",
    "tslib": "^2.7.0",
    "typescript": "^5.5.3",
    "vite": "^5.4.1"
  },
  "dependencies": {
    "@faker-js/faker": "^8.4.1",
    "@playwright/test": "^1.47.0",
    "@standardsdigital/qa-library": "^0.1.302",
    "axios": "^1.7.7",
    "moment": "^2.30.1",
    "vite-plugin-dts": "^4.2.1",
    "vite-tsconfig-paths": "^4.2.3"
  }
}
node.js typescript vite npm-package
1个回答
0
投票

答案比我预想的要简单得多。这是循环依赖。

  1. 我不小心在我创建的包中安装了自己的包。

  2. 我在项目中使用的其他库需要删除。

    rollupOptions: {
       external: ["@playwright/test", "axios"],
     },
    
© www.soinside.com 2019 - 2024. All rights reserved.