我有一个Node.js库包(我们称它为"OasisLib"),它有一个名为TypeGenerator.ts
的文件.
文件中发生的事情的确切逻辑并不相关.但这需要在构建项目时访问文件系统中的文件.因此,我们使用let fs = require('fs')
将一些额外的文件写入文件系统.
此OasisLib需要在两个不同的Node.js模块中使用:
- OasisUI-这是一个Reaction应用程序
- OasisLibExtension--这是另一个团队必须能够实现的另一个Node.js库,在这里我们需要使用OasisLib中定义的TypeGenerator在构建过程中生成额外的文件.
因此,OasisLib在UI包和非UI包中都使用,而TypeGenerator
in基础库包只在构建时在扩展库中需要.我们在index.ts
中将TypeGenerator作为导出添加到库包中,从而将其导出.
然而,当我运行UI包时,我们在UI的主页上收到以下错误:
ERROR in ../OasisLib/dist/src/gen/TypeGenerator.js 48:15-28
Module not found: Error: Can't resolve 'fs' in '/Volumes/Code/OasisLib/src/OasisLib/dist/src/gen'
因此,正在编译JS文件,尽管我没有在UI包中使用该文件.
这就是我想要弄清楚的.有没有办法从OasisLib模块中导出TypeGenerator,这样我就可以在LibExages包中使用它,而不会在UI包中引发问题?
或者,我可以在启动UI Reaction应用程序时排除特定文件吗?
我try 在OasisUI中添加以下内容,但没有解决问题:
"exports": {
"../OasisLib/dist/src/gen/TypeGenerator.js": {
"ignore": true
}
},
"browser": {
"fs": false
}
OasisLib的Package.json.
{
"name": "@myorg/oasis-lib",
"version": "1.0.0",
"description": "",
"author": "",
"license": "UNLICENSED",
"main": "dist/index.js",
"types": "dist/types/index.d.ts",
"scripts": {
"clean": "rm -rf dist && rm -rf node_modules",
"generate-models": "node ./dist/src/gen/GenerateTypes.js && tsc",
"build": "tsc && npm run generate-models",
"watch": "tsc -w",
"prepublishOnly": "npm run build && npm run test",
"test:watch": "vitest",
"test": "vitest run --coverage --passWithNoTests",
"start": "env-cmd -f .env.staging react-scripts start"
},
"files": [
"dist/src/*",
"dist/types/*"
],
"npm-pretty-much": {
"runTest": "never"
},
"dependencies": {
"ion-js": "^4.3.0"
},
"devDependencies": {
"@testing-library/jest-dom": "^6.0.1",
"@testing-library/react": "^14.1.2",
"@types/jest": "*",
"@types/node": "^16.18.25",
"@vitejs/plugin-react": "^4.0.3",
"@vitest/browser": "^0.34.6",
"@vitest/coverage-v8": "^0.34.6",
"env-cmd": "^10.1.0",
"prettier": "2.8.4",
"react-scripts": "^5.0.1",
"typescript": "^4.9.5",
"vite": "^4.4.5",
"vitest": "^0.34.6"
},
"peerDependencies": {
"@types/react": ">=18",
"@types/react-dom": ">=18",
"react": ">=18",
"react-dom": ">=18"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}