我可以使用webpack
和ts-loader
将TypeScript编译为具有全局命名空间的单个包并生成源映射。
但是,源地图位于源代码所在的./src
下。
我想要做的是将该位置更改为<my global namespace / module name>
,因为目前,当使用应用程序加载多个模块时,它无用。
例如,我创建的module-a
包含./src/foo.ts
和./src/boo.ts
。
我还创建了module-b
,其中包含./src/pak.ts
和./src/boo.ts
构建软件包时,我会在window.ModuleA
和window.ModuleB
下公开它们。
代码工作,但源映射搞砸了,因为它们都有一个指向./src/boo.ts
的文件。
如果我可以配置指向module-a
或module-a/*
的{{1}}源地图,那会更好。
这是我的webpack配置:
ModuleA/*
和tsconfig.json:
'use strict';
const path = require('path')
module.exports = {
devtool: 'inline-source-map',
entry: {
'module-a': './src/index'
},
output: {
path: path.join(__dirname, 'dist'),
filename: 'module-a.js',
library: 'ModuleA',
libraryTarget: 'var'
},
resolve: {
extensions: ['', '.ts', '.tsx', '.js']
},
module: {
preLoaders: [
{
test: /\.js$/,
loader: 'source-map-loader'
}
],
loaders: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
include: [
path.join(__dirname, 'src')
]
}
]
},
ts: {
configFileName: 'tsconfig.json'
}
}
答案 0 :(得分:2)
我目前的解决方案是使用compilerOptions.sourceRoot
。
它会将./src
替换为您想要的任何内容。
但是,webpack
/ ts-loader
会在其后生成一条额外的路径。
例如,
在module-a/src/foo.js.map
中,sourceRoot正确module-a
。
但是,在捆绑后,./dist/module-a.js
的源地图引用为module-a/C:\Users\<user>\...\module-a\src
。
我不知道是否应该在webpack
或ts-loader
(最有可能webpack
)上提交问题,但至少现在每个模块的源地图都是在一个不同的文件夹。
更新:上述问题已修复。这是一个有效的解决方案。