提问者:小点点

“dist”文件夹中的模块解析


我正在开发一个NodeJS/TypeScript应用程序,我希望能够从dist/文件夹启动它。

每个src和dist文件夹的结构如下所示:

server/
|---dist/
|   |---server/
|       |---src/
|           |---index.js
|           |---utils/
|               |---connection.js
|---src/
|   |---index.ts
|   |---utils/
|       |---connection.ts
|
|---package.json
|---tsconfig.json

这个dist文件夹是生成的代码,这个路径是使用我的tsconfig.json文件中的outdir配置的。

我还将package.json中的main属性配置为dist/server/src/index.js,将type属性配置为module

在此项目中,我使用Typescript4.0.5

我已将tsconfig.json中的paths属性指定为“utils/*”:[“src/utils/*”],baseUrl属性指定为“./”,属性ModuleResolutionstrategy指定为Node

现在这是我的问题。我希望能够像在源代码中一样导入模块,但这次直接从dist文件夹中导入,如下所示:

import createConnection from 'utils/connexion';

但是,当我悬停在VScode中的导入声明时,它似乎无法解析模块,并且我得到一个错误错误[ERR_MODULE_NOT_FOUND]:无法找到从/home/maxime/dev/jeuxduplacard/packages/server/dist/server/src/index.js导入的包'utils'。

dist文件夹中的文件路径与Server文件夹中的文件路径相同。如果问题来自模块解析,是否有一种方法可以持久化dist文件夹中的路径别名(而不安装第三方库)?

{
    "compilerOptions": {
        "esModuleInterop": true,
        "target": "es2020",
        "moduleResolution": "node",
        "sourceMap": true,
        "baseUrl": "./",
        "outDir": "dist",
        "strict": true,
        "lib": ["ES2017", "ES2020"],
        "types": [
            "node"
        ],
        "allowSyntheticDefaultImports": true,
        "noImplicitAny": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "resolveJsonModule": true,
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "incremental": true,
        "skipLibCheck": true,
        "strictPropertyInitialization": false,
        "paths": {
            "utils/*": ["src/utils/*"]
        }
    }
}

谢谢


共1个答案

匿名用户

是的,因为你不能从工作目录之外导入文件。您可以做的是,您可以链接一个本地模块,并像访问任何其他npm包一样访问它。

npm link (in package dir)
npm link [<@scope>/]<pkg>[@<version>]
alias: npm ln

https://docs.npmjs.com/cli/v6/commands/npm-link