【问题标题】:Webpack ts-loader : change tsconfig filenameWebpack ts-loader:更改 tsconfig 文件名
【发布时间】:2017-03-18 12:08:56
【问题描述】:

我有 2 个 tsconfig,一个用于我的开发版本,一个用于我的产品版本。
我选择带有 -p 标志的 tsconfig:
tsc -p dev.tsconfig.json

Ts-loader 正在寻找一个 tsconfig.json 文件。如何使用 ts-loader 指定另一个文件名?

module.exports = {
    entry : __dirname + "/src/app/main.ts",
    output : {
        path : __dirname + "/dist",
        filename : "bundle.js"
    },
   resolve : {
     extensions : ["", ".webpack.js", ".web.js", ".js", ".ts"]
   },
   module: {
        loaders: [
            { test: /\.ts?$/, loader: "ts" }
        ]
    }
};

【问题讨论】:

    标签: typescript webpack tsconfig ts-loader


    【解决方案1】:

    更新(Webpack 4):如 cmets 中所述,语法已更改为 answer below 中所引用的。


    Webpack 使我们能够为每个加载器添加自定义选项。所有ts-loader 配置属性都描述为here

    configFileName 是您要查找的属性。应该是这样的。

    module.exports = {
        entry : __dirname + "/src/app/main.ts",
        output : {
            path : __dirname + "/dist",
            filename : "bundle.js"
        },
        resolve : {
            extensions : ["", ".webpack.js", ".web.js", ".js", ".ts"]
        },
        module: {
            loaders: [
                { test: /\.ts?$/, loader: "ts" }
            ]
        },
        ts: {
            configFileName : 'dev.tsconfig.json'
        }
    };
    

    【讨论】:

    • 完美!所以我会这样做:module.exports = env => ({ ts : { configFileName : env.build === 'dev' ? 'dev.tsconfig.json' : 'acc.tsconfig.json'' } })
    • 过时了。文档不再提及 ts.configFileName 选项
    • 这不再有效,请参阅this answer instead
    • 不确定他们是否改变了它,但选项的名称是:configFile:github.com/TypeStrong/ts-loader#options。答案中建议的名称使 webpack 抛出错误。
    【解决方案2】:

    2017 年 9 月 6 日更新

    configFileName 已被弃用,取而代之的是 configFile - Source

    【讨论】:

    • 我没有足够的代表发表评论,所以我很抱歉添加这个作为答案。显然有人不喜欢那样。 =)
    【解决方案3】:

    尝试在加载器名称后使用 configFile 作为查询字符串。这里是webpack configts-loader's config

    module.exports = {
       entry : "./main.ts",
       output : {
            path : __dirname + "/dist",
            filename : "bundle.js"
       },
       resolve : {
           extensions : ["", ".js", ".ts"]
       },
       module: {
         loaders: [
            { test: /\.ts?$/, loader: "ts-loader?configFile=src/tsconfig.server.json" }
         ]
       },
    };
    

    【讨论】:

      【解决方案4】:

      这是截至 2017 年 12 月 (Webpack 3.10.0) 时指定 configFile(以前称为 configFileName,如 Frank 所说)的方法。

      Webpack 配置

      注意:Since version 2,Webpack 一直在使用 module.rules 而不是 module.loaders,并且已弃用查询参数以支持 options 对象。

      module.exports = {
          entry:  {
              "./build/bundle" : "./src/startup/Entry.ts"
          },
          output: {
              filename: '[name].js',
              libraryTarget: 'this'
          },
          devtool: 'source-map',
          resolve: {
              modules: [".", "node_modules"],
              extensions: [".js", ".webpack.js", ".web.js", ".d.ts", ".ts", ".tsx"]
          },
          module: {
              rules: [
                  {
                      test: /\.tsx?$/,
                      exclude: [/node_modules/],
                      loader: "ts-loader",
                      options: {
                          configFile: "webpack_configs/tsconfig.webpack.json"
                      }
                  }
              ]
          },
          plugins: []
      };
      

      目录结构

      我的目录结构的根是这样的:

      webpack.config.js
      webpack_configs/tsconfig.webpack.json
      tsconfig.json
      package.json
      src/*
      test/*
      node_modules/*
      build/*
      

      ...其中*表示多个文件。

      打字稿配置

      tsconfig.webpack.json 本身只是通过排除 test 文件夹来扩展我的通用 tsconfig.json

      {
          "extends": "../tsconfig",
           "exclude": [
             "node_modules",
             "test"
           ]
      }
      

      ... 但是你不需要有两个 webpack 配置就可以从 configFile 设置中受益;您可以简单地使用它从自定义位置定位您的单数 tsconfig.json

      【讨论】:

      • 这不再适用于 WebPack 4。请参阅此页面上我的答案中的解决方案。
      【解决方案5】:

      在 Webpack 4 中,您需要将选项指定为 use 对象:

      use: [{
          loader: 'ts-loader',
          options: {
              configFile: "tsconfig.webpack.json"
          }
      }]
      

      完成 Webpack 配置:

      var path = require('path');
      
      module.exports = {
          entry: path.resolve(__dirname, 'src') + '/index.ts',
          output: {
              path: path.resolve(__dirname, 'dist'),
              filename: 'your-library-name.js',
          },
          module: {
              rules: [
                  {
                      test: /\.ts$/,
                      use: [{
                          loader: 'ts-loader',
                          options: {
                              configFile: "tsconfig.webpack.json"
                          }
                      }],
                      exclude: /node_modules/,
                  }
              ]
          },
          mode: 'development',
          resolve: {
              extensions: ['.js', '.ts']
          },
          devtool: false
      };
      

      【讨论】:

      • 太棒了,谢谢!另请注意,对于仍在苦苦挣扎的其他人,如果您要提供 tsconfig 的相对路径,请从 ts-loader 文档中获取“它将相对于相应的 .ts 条目文件进行解析。”
      【解决方案6】:

      更多如下:

      {
         test: /\.tsx?$/, 
         loader: 'ts-loader',
         options: {configFile: 'tsconfig.webpack.json'} 
      }
      

      https://www.npmjs.com/package/ts-loader#configfile-string-defaulttsconfigjson

      【讨论】:

        猜你喜欢
        • 2017-06-29
        • 2017-05-07
        • 2018-09-19
        • 2017-05-27
        • 2021-05-05
        • 2019-04-18
        • 2016-06-03
        • 1970-01-01
        • 2017-05-05
        相关资源
        最近更新 更多