我正在配置Webpack以支持我的React应用程序的同构构建管道。这涉及到在客户端与服务器代码上的简单代码拆分。问题是服务器代码可以安全地期望本地node
模块可用,而客户端代码显然不能。使用分别设置的target: web
和target: node
属性可以正确地编译每个“ split”。不幸的是,Webpack不支持target
属性按条目。此外,多个Webpack配置将不会利用拆分/共享的代码,因此也需要一个配置。
我当前(非常简单)的配置如下。
const config = {
mode: "none",
entry: {
client: "./src/index.tsx",
server: "./src/server.tsx",
},
output: {
path: path.resolve(__dirname, "dist"),
publicPath: "/",
},
resolve: {
// Add `.ts` and `.tsx` as a resolvable extension.
extensions: [".ts", ".tsx", ".js"],
alias: {
utilities: path.resolve(__dirname, "src/utilities"),
},
},
module: {
rules: [
{ test: /\.css$/, use: "css-loader" },
// all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
{ test: /\.tsx?$/, loader: "ts-loader", options: { transpileOnly: true } },
{ test: /.js$/, loader: "source-map-loader", enforce: "pre" },
{ test: /\.(png|svg|jpg|gif)$/, loader: "url-loader" },
],
},
optimization: {
splitChunks: {
chunks: "all",
},
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true,
uglifyOptions: {
mangle: {
safari10: true,
},
},
}),
],
},
plugins: [
new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") }),
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new ForkTsCheckerWebpackPlugin(),
],
};
如何通过忽略丢失的import
模块(fs,path,net等),同时保持node
的目标来确保web
到服务器端代码的正确编译客户建立?
有一个in progress的target: universal
功能。