Javascript 使用Typescript的网页包:两种配置中的公共设置,那么哪个优先?
我正处于将javascript(带有webpack)项目转换为typescript项目的初始阶段,我遇到的许多困惑之一是,它们似乎是一些可以出现在webpack和typescript中的配置设置,所以哪个优先 (我目前正在开发一个节点cli应用程序) 例如,主要的例子是编译中包含哪些文件 在网页包配置中,您可以指定使用规则选择哪些输入文件:Javascript 使用Typescript的网页包:两种配置中的公共设置,那么哪个优先?,javascript,typescript,webpack,tsconfig,Javascript,Typescript,Webpack,Tsconfig,我正处于将javascript(带有webpack)项目转换为typescript项目的初始阶段,我遇到的许多困惑之一是,它们似乎是一些可以出现在webpack和typescript中的配置设置,所以哪个优先 (我目前正在开发一个节点cli应用程序) 例如,主要的例子是编译中包含哪些文件 在网页包配置中,您可以指定使用规则选择哪些输入文件: module: { rules: [ { test: /index.ts/, use: 'sheba
module: {
rules: [
{
test: /index.ts/,
use: 'shebang-loader'
},
{
test: /\.ts(x?)$/,
use: 'ts-loader'
},
{
test: /\.json$/,
use: 'json-loader'
}
]
},
从上面可以看到,我正在为不同的文件类型使用不同的加载程序
那么我的初始tsconfig.json如下所示:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"noImplicitAny": true,
"lib": [
"es5", "es2015", "es6", "dom"
]
},
"include": [
"lib/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
那么webpack和typescript之间交互的真正本质是什么呢?我无法从typescript或网页包文档中辨别出这一点。两者似乎都能够指定编译中包含的输入文件
另一个(可能更好的例子)是输出文件。在webpack配置中,我有以下内容:
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, 'dist'),
filename: 'application-bundle.js'
}
"outFile": "./dist/application-bundle.js",
定义“application bundle.js”的是“dist”文件夹中的输出文件
在tsconfig中,您可以有如下内容:
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, 'dist'),
filename: 'application-bundle.js'
}
"outFile": "./dist/application-bundle.js",
(我目前没有定义outFile属性,但我知道您可以这样做,但如果能够这样做,就会产生歧义,从而造成混乱)。那么在这种情况下,webpack会覆盖typescript吗,反之亦然?建议的策略是什么
可能会有更多的typescript/webpack交叉会引起混淆,但到目前为止,我描述的2个是我需要理解的最前沿和最紧迫的问题,谢谢
编辑:考虑过之后,我还需要另一个澄清。我猜当您构建一个TS/WP项目时,TS编译器首先运行并创建所有的.js文件(比如在.dist文件夹中)。然后webpack绑定所有生成的.js文件。因此,假设这是正确的,那么我是否需要将webpack配置为使用dist文件夹中的.js文件作为其输入,而不是项目源中的.js文件(即我的源js文件所在的./lib下的所有内容)
我希望以渐进的方式转换我的项目,因此我刚才所说的并不真正符合我的需要。Webpack需要从./dist获取一些.js文件,从./lib获取一些尚未转换为typescript的文件。我不知道如何修改项目进行增量升级
[…]似乎有一些配置设置可以出现在webpack和typescript中,那么哪个优先
当Webpack与TypeScript相结合时,配置中存在一些自然冗余,这一点您是对的。让我们来回答你的第一个问题:
编译中包括哪些文件?[…]另一个例子是输出文件。[…]那么在这种情况下,webpack会覆盖typescript吗,反之亦然?建议的策略是什么
简单地说,TypeScript和Webpack都处理/转换输入文件,并在目标目录结构或文件包中发出输出-都需要一些输入/输出配置信息。TypeScript编译器可以独立运行,也可以作为文件处理器集成到更大的Web包构建中。使用outFile
选项,TypeScript甚至可以被视为一个独立的迷你绑定器,因为它将所有.ts
-文件绑定到单个目标文件
为了回答这个问题,如果TypeScript或Webpack配置优先,那么理解Webpack是如何工作的是很重要的。我在这里引用你的一个假设:
我猜当您构建一个TS/WP项目时,TS编译器首先运行并创建所有的.js文件(比如在.dist文件夹中)。然后webpack绑定所有生成的.js文件
这是不完全正确的。但很好,你这么说,因为它让你的核心理解问题更加清晰。网页包中的所有内容都以您在配置中指定的开始-如果您愿意,这就是输入。在此输入模块中,webpack考虑所有其他可传递导入的模块(例如,通过导入
或要求
),并创建依赖关系树
依赖关系树中的每个文件都可以选择通过转换,也可以像文件处理管道一样链接。因此ts加载器
和底层TypeScript编译器使用test:/\.ts(x?$/
谓词为.ts/.tsx文件应用转换
综上所述,该网页包考虑了您的输入文件,这导致了大量进一步导入的.ts/.tsx文件(在其他文件类型中,我们忽略了它们)。对于每个文件,TypeScript加载器将在加载器处理管道的过程中被调用。因此,TypeScript I/O配置将被忽略,网页包的条目
/输出
配置在生成中优先。所有其他与TypeScript相关的设置都取自tsconfig.json
,如:“tsconfig.json文件控制与TypeScript相关的选项,以便IDE、tsc命令和此加载程序都共享相同的选项。”
我希望以渐进的方式转换我的项目
以循序渐进的方式从中迁移是非常好的
希望有帮助。没问题!(我正在复习你的答案)嗨,福特04,谢谢你的答案,它真的帮助很大。我的观点是,不要放弃现有的项目。我将启动一个新的typescript项目,并逐步转换功能。这是管理我目前看到的混乱类型脚本错误(特别是模块/名称空间/导入/导出)的唯一方法。干杯如果这是一个小项目,而且你负担得起,那就去做吧!如果您想在一个项目中尝试一下,我认为值得一看js迁移的最后一个链接,尤其是set