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) 上的“npm run”
如何使用 webpack-chain 将 appendTsSuffixTo 选项添加到 ts-loader?
适配 webpack v4的最后一个ts-loader版本是8.2.0