网站搜索

javascript - 如何使用 Webpack 打包具有独立 js 文件的多页面 (tsx) 网站?


我正在使用:

用于页面渲染的react。

typescript 直接(无需 babel)将 tsx 转译为适用于浏览器的 ES5

使用 webpack 分别生成代码

babel-polyfill 应打包在 vendor.js 中,但不应被 TypeScript 代码引用

我想将 JavaScript 库和我的公共代码打包到一个 vendor.js 中,并为每个 [name].tsx(其中 仅 包含一个继承自 React.Component<P,S> 的类定义 [name])使用 HtmlWebpackPlugin 生成 独立的 [name].js 文件及引用 vendor.js 和 [name].js 的 [name].html(带模板)。

[name].tsx 可能会导入模块。包含在 vendor.js 中的模块 不能包括在 [name].js 中,其他模块必须正常包含在 [name].js 中

我已经阅读了 webpack 官方网站的文档,但仍然不知道该如何做。

我确实找到了一些实现多页面网站的指南,但所有的库都包含在单独的 [name].js 文件中,这意味着 JavaScript 库在每一个 [name].js 中都被重复包含,这显然不是预期的。

我找到了一些关于 externals 的指南,但它只能用于现有的 js 文件,不能用于生成的 bundle 文件。

这是我当前的 webpack.config.js,它仅支持单页面:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');

module.exports = {
    entry: {
        "index.js": ['babel-polyfill', './src/index.tsx']
    },
    output: { filename: '[name]' },
    plugins: [
        new HtmlWebpackPlugin({
            template: "./src/index.html"
        })
    ],
    module: {
        rules: [{
            test: /\.(ts|tsx)$/,
            loader: 'ts-loader',
            exclude: '/node_modules/'
        }, {
            enforce: 'pre',
            test: /\.js$/,
            loader: 'source-map-loader'
        },]
    },
    resolve: {
        extensions: ['.webpack.js', '.web.js', '.ts', '.js', '.tsx']
    },
    devtool: "source-map"
} 

有没有办法让它像描述的那样支持多页?

相关文章