Webpack ts-loader:更改 tsconfig 文件名

Posted

技术标签:

【中文标题】Webpack ts-loader:更改 tsconfig 文件名【英文标题】:Webpack ts-loader : change tsconfig filename 【发布时间】: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" 
        ]
    
;

【问题讨论】:

【参考方案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 config 和ts-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

【讨论】:

以上是关于Webpack ts-loader:更改 tsconfig 文件名的主要内容,如果未能解决你的问题,请参考以下文章

带有 ts-loader 的 webpack 线程加载器

挂在 ts-loader (webpack) 上的“npm run”

如何使用 webpack-chain 将 appendTsSuffixTo 选项添加到 ts-loader?

适配 webpack v4的最后一个ts-loader版本是8.2.0

webpack compile 在新计算机上给出 ts-loader 错误

ts-loader vs babel-loader 在 Typescript 中使用 webpack