Webpack ts-loader:更改tsconfig文件名

gr3*_*r3g 4 typescript tsconfig webpack ts-loader

我有2个tsconfigs,一个用于我的开发构建,一个用于我的prod构建.
我选择带有-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" }
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)

mve*_*and 32

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

use: [{
    loader: 'ts-loader',
    options: {
        configFile: "tsconfig.webpack.json"
    }
}]
Run Code Online (Sandbox Code Playgroud)

完整的 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
};
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,谢谢你!另请注意,对于其他仍在苦苦挣扎的人,如果您提供 tsconfig 的相对路径,请从 ts-loader 文档中“它将相对于相应的 .ts 条目文件进行解析”。 (3认同)

Jam*_*rch 13

以下是截至2017年12月(Webpack 3.10.0)的指定方式configFile(以前configFileName称为Frank注释).

Webpack配置

注意: 从版本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: []
};
Run Code Online (Sandbox Code Playgroud)

目录结构

我的目录结构的根看起来像:

webpack.config.js
webpack_configs/tsconfig.webpack.json
tsconfig.json
package.json
src/*
test/*
node_modules/*
build/*
Run Code Online (Sandbox Code Playgroud)

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

打字稿配置

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

{
    "extends": "../tsconfig",
     "exclude": [
       "node_modules",
       "test"
     ]
}
Run Code Online (Sandbox Code Playgroud)

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


goe*_*ing 9

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

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'
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 这不再有效,请参阅[此答案](/sf/answers/3892501161/) (8认同)
  • 过时的。文档不再提及`ts.configFileName`选项 (6认同)

Fra*_*III 7

2017 年 9 月 6 日更新

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

  • 我没有足够的代表发表评论,所以我很抱歉将其添加为答案。显然有人不喜欢那样。=) (4认同)

小智 7

更像下面:

{
   test: /\.tsx?$/, 
   loader: 'ts-loader',
   options: {configFile: 'tsconfig.webpack.json'} 
}
Run Code Online (Sandbox Code Playgroud)

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