gpt4 book ai didi

webpack - webpack 构建之外的服务器渲染脚本标签

转载 作者:行者123 更新时间:2023-12-04 01:08:00 28 4
gpt4 key购买 nike

我正在服务器渲染我的 react 应用程序,如下所示:

export default ({ clientStats }: { clientStats: any }) => async (req: Request, res: Response, next: any) => {
const context: any = {};

const app = (
<StaticRouter location={req.url} context={context}>
<Application />
</StaticRouter>
);

if (context.url) {
res.writeHead(301, {
Location: context.url
});

res.end();
return;
}

const { styles, js, scripts } = flushChunks(clientStats, {
chunkNames: flushChunkNames()
});

const appString = renderToString(app);
const { title } = Helmet.renderStatic();

res.status(200).send(`
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta httpEquiv="X-UA-Compatible" content="IE=edge" />
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
${styles}
${title}
</head>
<body>
<div id="root">${appString}</div>
<script type=\'text/javascript\' src=\'init.js\' defer></script>
</body>
</html>
`);
};

如何引用 webpack 构建之外的脚本?

我有一个 init.js文件很少,我只想引用它。

我可以把它放在哪里,以便在呈现 html 时,脚本标签解析?

最佳答案

就是这么简单但有点复杂,我先解释所有方法,然后用代码展示。

您应该考虑为所有 JavaScript 设置一个文件夹他们不在的文件 webpack build 。然后把它们放到这个文件夹中,然后将其导入为externals进入 webpack配置。然后将其设置为单独的供应商文件,并且绝对输出文件名应该是动态的,所以webpack构建它的包,然后复制你的 JavaScript文件到 dist 文件夹。遵循以下:

// webpack.config.js
...
module.exports = {
...
externals: {
separateFile: `${srcRoot}/outFiles/yourJavaScriptFile.js`,
},
...
};

通过使用上面的代码,您可以为您的 JavaScirpt 考虑一个文件夹。文件并将其导入 webpack配置为 externals配置。

现在,您应该将其作为单独的文件与应用程序文件一起导入。见下文:
// webpack.config.js
...
module.exports = {
...
entry: {
myFile: 'separateFile', // <== its your external imported file
app: `${srcRoot}/app/index.js`, // <== its your app file
},
output: {
path: '/dist',
filename: '[name].js' // <== dynamically make your JavaScript files,
// so, in dist folder you can see app.js and
// myFile.js file
}
...
};

当然,您应该将这些文件导入到模板函数中,因此:
  ...
res.status(200).send(`
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta httpEquiv="X-UA-Compatible" content="IE=edge" />
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
${styles}
${title}
</head>
<body>
<div id="root">${appString}</div>
<script src="app.js" defer></script>
<script src="myFile.js" defer></script>
</body>
</html>
`);
...

关于webpack - webpack 构建之外的服务器渲染脚本标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51683597/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com