使用webpack将打印脚本编译为js并保留目录结构

hs1rzwqc  于 2022-12-23  发布在  Webpack
关注(0)|答案(1)|浏览(341)

我希望webpack把我的typescript节点项目编译成js,但我希望它保持目录结构,而不是捆绑成1个文件。
这可能吗?
我的结构是:

src
   |_controllers
     |_home
       |_index.ts
   |_ services
    // etc.

我想把它编译成:

dist
   |_controllers
     |_home
       |_index.ts
   |_ services
    // etc.

目前我的配置是这样的:

{
    name: 'api',
    target: 'node',
    externals: getExternals(),
    entry: isDevelopment ? [...entries] : entries,
    devtool: !isDevelopment && 'cheap-module-source-map',
    output: {
      path: paths.appBuild,
      filename: '[name].js',
      libraryTarget: 'commonjs2'
    },
    plugins: [
      new WriteFilePlugin(),
      new webpack.optimize.LimitChunkCountPlugin({
        maxChunks: 1
      }),
      isProduction && new webpack.optimize.ModuleConcatenationPlugin()
    ]
  }

有可能使用webpack吗?
我不能只使用tsc,因为我有一个yarn workspaces monorepo,并且我可能有一个如下所示的链接引用:
import {something} from '@my/package';
@my/package不存在于npm中,只存在于monorepo的上下文中,我可以使用带有webpack的节点外部对象将其包含在捆绑包中,我不认为我可以保持这种文件夹结构。
新的typescript 3.0项目引用能解决这个问题吗?

3pvhb19x

3pvhb19x1#

理解您的顾虑。看起来transpile-webpack-plugin完全可以实现。您可以按以下方式设置它:

const TranspilePlugin = require('transpile-webpack-plugin');

module.exports = {
  // ...
  entry: './src/controllers/home/index.ts',
  output: {
    path: __dirname + '/dist',
  },
  plugins: [new TranspilePlugin({ longestCommonDir: './src' })],
};

该插件可以很好的与webpack resolve.alias和externals配合使用。所有直接或间接导入的文件都将被收集并单独编译到输出目录中,而不会捆绑,但会保留目录结构和文件名。试试看吧。🙂

相关问题