ASP.NET Core 2.0+TypeScript项目Webpack输出结构与批量入口问询
针对你的ASP.NET Core 2.0项目Webpack配置问题解答
问题1:是否可将所有TypeScript文件作为Webpack的入口?
当然可以!不需要手动逐个指定入口文件,我们可以借助Node.js的fs和path模块自动遍历Scripts文件夹下的所有.ts文件,把它们全部设为Webpack的入口点。
问题2:执行Webpack后,能否生成与原目录结构一致的输出?
完全没问题!通过配置Webpack的output.filename,我们可以让生成的.js文件保持和原.ts文件完全一致的目录结构,输出到wwwroot/Output目录下。
修改后的完整webpack.config.js配置
const fs = require('fs'); const path = require('path'); // 递归遍历Scripts文件夹,生成所有.ts文件的入口配置 function getEntryPoints() { const entryPoints = {}; const scriptsRoot = path.resolve(__dirname, 'Scripts'); function scanDirectory(dir) { const files = fs.readdirSync(dir); files.forEach(file => { const fullFilePath = path.join(dir, file); const fileStats = fs.statSync(fullFilePath); if (fileStats.isDirectory()) { // 如果是文件夹,继续递归遍历 scanDirectory(fullFilePath); } else if (path.extname(file) === '.ts') { // 生成入口键:相对于Scripts的路径,去掉.ts后缀 const relativePath = path.relative(scriptsRoot, fullFilePath); const entryKey = relativePath.replace(/\.ts$/, ''); entryPoints[entryKey] = fullFilePath; } }); } scanDirectory(scriptsRoot); return entryPoints; } module.exports = { // 自动生成所有.ts文件的入口 entry: getEntryPoints(), output: { // 输出目录指向wwwroot/Output path: path.resolve(__dirname, 'wwwroot/Output'), // [name]会替换成我们生成的相对路径,保持原目录结构 filename: '[name].js' }, module: { rules: [ // 配置ts-loader处理TypeScript文件 { test: /\.ts$/, use: 'ts-loader', exclude: /node_modules/ } ] }, resolve: { // 让Webpack能识别.ts和.js文件的导入 extensions: ['.ts', '.js'] } };
关键说明
- 自动入口生成:
getEntryPoints函数会递归遍历Scripts下的所有文件,把每个.ts文件的相对路径(去掉后缀)作为入口键,文件绝对路径作为入口值,这样Webpack就会把所有.ts文件都当作入口处理。 - 保持目录结构:
output.filename中的[name]会对应入口键(也就是原文件相对于Scripts的路径),比如Scripts/Modules/User.ts会生成wwwroot/Output/Modules/User.js,完美复刻原目录结构。 - TypeScript处理:需要确保你已经安装了
ts-loader和typescript依赖,可以通过npm install ts-loader typescript --save-dev安装,同时项目根目录要有tsconfig.json配置文件(可以通过tsc --init生成)。
内容的提问来源于stack exchange,提问作者Alvin
相关产品推荐
相关产品推荐

