找不到模块:错误:无法在 monorepo 中的 babel 和 typecript 中解析

Jon*_*Sud 7 typescript webpack babeljs

我创建了一个 lerna monorepo (nodejs 包),并尝试使用 babel 和 webpack 编译我的打字稿文件。

在我的项目中,我有两个主要文件夹:应用程序和包。

我在 packages/package1 中运行构建lerna run build。package1 中的构建脚本是webpack.

在 package1 里面我有一些文件:

webpack.config.js:

 const path = require('path');

 const root = (p) => path.resolve(__dirname, '../..', p);

 const isProd = process.env.NODE_ENV === 'production';
    
    module.exports = {
      entry: {
        app: './app.ts',
      },
    
      output: {
        filename: '[name].js',
      },
    
      target: 'node',
      node: {
        __dirname: false,
      },
    
      module: {
        rules: [
          {
            test: /\.ts$/,
            exclude: /(node_modules|bower_components)/,
            use: {
              loader: 'babel-loader',
            },
          },
        ],
      },
    
      resolve: {
        extensions: ['.ts', '.tsx', '.js', '.jsx'],
        alias: {
          '@packages/*': root('packages/*/src'),
        },
      }
    };
Run Code Online (Sandbox Code Playgroud)

babel.config.js:

module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          browsers: ['last 2 versions', 'safari >= 7'],
        },
      },
    ],
    '@babel/preset-typescript',
  ],
  plugins: ['@babel/plugin-proposal-export-default-from'],
};
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "module": "esnext",
    "strict": false,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "resolveJsonModule": true,
    "target": "esnext",
    "noImplicitAny": false,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist",
    "lib": ["esnext", "dom"],
    "types": ["webpack-env", "node","jest"]
  }
}
Run Code Online (Sandbox Code Playgroud)

在项目的根目录中我有 tsconfig.json:

tsconfig.json:

{
  "compilerOptions": {
    "noEmit": true,
    "strict": true,
    "jsx": "react",
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "removeComments": true,
    "rootDir": ".",
    "baseUrl": ".",
    "paths": {
      "@packages/*": ["packages/*/src"],
      "*": ["node_modules", "packages"]
    }
  },
  "include": ["packages", "jest-dom/extend-expect"],
  "exclude": ["node_modules", "dist"]
}
Run Code Online (Sandbox Code Playgroud)

问题是,babel/webpack 抛出错误:

Module not found: Error: Can't resolve '@packages/foo'
Run Code Online (Sandbox Code Playgroud)

当然,我的文件指向正确的位置(索引等)。

可能是什么问题呢?

更新

我在 webpack 中添加了别名部分,但它不起作用:

 alias: {
      '@packages/*': root('packages/*/src'),
    },
Run Code Online (Sandbox Code Playgroud)