问题:。 错误从何而来? 如果库中发生额外的导入,为什么会出现这种情况? 如何在其他项目中导出自定义库而不破坏项目 - 可以运行? 请注意,这是我的第一个库,我正在创建很多未知的东西。我相信问题在于我的 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;
}
我尝试了多种设置,但不确定是否有任何真正有意义。下面的函数可以正常工作,没有任何问题,尽管它们没有安装任何第三个依赖项。 ]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"
}
}
答案比我预想的要简单得多。这是循环依赖。
我不小心在我创建的包中安装了自己的包。
我在项目中使用的其他库需要删除。
rollupOptions: {
external: ["@playwright/test", "axios"],
},