![](/img/trans.png)
[英]Bundle Vue project into single js file that can be embedded in Ghost blog post
[英]Bundle React.js project into single js file that can be embedded in Ghost blog post
在构建了一个 React.js 项目之后,我想将所有文件(HTML、js、CSS)捆绑到一个可以嵌入到 ghost 博客文章中的 js 文件中。
这是一个如何为幽灵博客文章完成此操作的示例。
https://blog.openbloc.com/include-a-js-app-in-a-ghost-post/
我的问题是如何将 React.js 项目文件捆绑到可以部署在 ghost 博客文章中的单个文件中?
这可以为 Vue.js 成功完成,但我不确定是否可以为 React.js 完成
将 Vue 项目打包成可以嵌入到 Ghost 博客文章中的单个 js 文件
我正在使用 React v18
使用 React 模板搭建一个Vite项目:
npm init vite my-react-project -- --template react
安装vite-plugin-css-injected-by-js
以自动将应用的样式注入到文档<head>
中:
cd my-react-project npm i -D vite-plugin-css-injected-by-js
通过plugins
配置 Vite 以使用该插件; 并通过build.cssCodeSplit
禁用 CSS 代码拆分:
// vite.config.js import { defineConfig } from 'vite' import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js' export default defineConfig({ plugins: [ cssInjectedByJsPlugin(), ], build: { cssCodeSplit: false, }, })
通过build.rollupOptions.input
配置 Vite 以构建单个 JavaScript 文件(即main.jsx
文件):
// vite.config.js import { defineConfig } from 'vite' export default defineConfig({ build: { rollupOptions: { input: { app: './src/main.jsx', }, }, }, })
配置 Vite 以通过base
指定部署目标的基本 URL:
// vite.config.js import { defineConfig } from 'vite' export default defineConfig({ base: 'https://cdn.jsdelivr.net/gh/tony19-sandbox/vite-react-single-js-file/dist/', })
理想情况下,基本 URL 是一个 CDN 链接,可实现最佳加载性能。 例如,如果应用程序文件托管在 GitHub 上的https://github.com/tony19-sandbox/vite-react-single-js-file/tree/main/dist
,则 CDN 链接将为https://cdn.jsdelivr.net/gh/tony19-sandbox/vite-react-single-js-file/dist/
。
构建应用程序:
cd my-react-project npm run build
然后构建会生成一个包含这些文件的dist
目录:
dist/assets/app.d91c60c0.js dist/assets/logo.ecc203fb.svg
在 HTML 块中,添加一个div
,其 ID 与应用程序原始源中src/main.jsx
中的安装点匹配(默认 ID 为"root"
)。
<div id="root">App loading...</div>
添加一个<script>
来拉入之前构建的app.js
文件。 例如,如果您将脚本托管在 GitHub 上,则可以使用如下 CDN 链接:
<script src="https://cdn.jsdelivr.net/gh/tony19-sandbox/vite-react-single-js-file/dist/assets/app.d91c60c0.js"></script>
结果如下所示:
您可以使用gulp
将 react 项目捆绑到一个文件中。 脚步:
安装依赖npm install --save-dev gulp gulp-inline-source gulp-replace
创建一个将禁用源映射的.env
文件。
INLINE_RUNTIME_CHUNK=false GENERATE_SOURCEMAP=false SKIP_PREFLIGHT_CHECK=true
在根文件夹中创建gulpfile.js
文件并将其写入其中。
const gulp = require('gulp'); const inlinesource = require('gulp-inline-source'); const replace = require('gulp-replace'); gulp.task('default', () => { return gulp .src('./build/*.html') .pipe(replace('.js"></script>', '.js" inline></script>')) .pipe(replace('rel="stylesheet">', 'rel="stylesheet" inline>')) .pipe( inlinesource({ compress: false, ignore: ['png'], }) ) .pipe(gulp.dest('./build')); });
现在运行npm run build
以创建优化的生产构建,然后运行npx gulp
将静态构建文件夹中的所有 JS 和 CSS 文件捆绑到单个主 html 文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.