场景:老项目需要后端引擎将数据写入模版引擎
归档.zip
由于还是比较擅长 node ,所以还是起一个 node 服务

创建一个 node 服务

  1. yarn add express

server.js

  1. const express = require("express");
  2. const app = express();
  3. app.set("view engine", "pug");
  4. app.get("/", (req, res) => {
  5. res.render("index", {
  6. title: "标题",
  7. message: "hello node",
  8. });
  9. });
  10. app.listen(4000);

/views/index.pug

  1. html
  2. head
  3. title= title
  4. body
  5. h1= message
  6. div(id="app")
  7. script(src="http://localhost:3000/@vite/client" type="module") // 引入前端服务文件
  8. script(src="http://localhost:3000/src/main.js" type="module") // 引入前端服务文件

image.png

  • 启动服务

    1. node server.js

    启动前端服务

    访问前端服务
    image.png
    访问后端服务地址
    image.png

  • 此时 图片时无法显示出来的

正常如果需要做这种需求,一般会把我们前端代码,放到后端服务中,然后在后端服务中做静态资源映射,映射到前端目录下
image.png

打包前端项目引入到后端服务

打包前端

  • 修改 vite.config.js

    1. export default defineConfig({
    2. plugins: [vue(), vueJsx()],
    3. resolve: {
    4. alias: {
    5. '@': '/src',
    6. '@styles': '/src/styles',
    7. },
    8. },
    9. server: {
    10. host: '0.0.0.0',
    11. },
    12. build: {
    13. manifest: true,
    14. },
    15. })

    打包的 dist 会多一个 manifest.json 文件

    1. {
    2. "index.html": {
    3. "file": "assets/index.af984f6b.js",
    4. "src": "index.html",
    5. "isEntry": true,
    6. "imports": [
    7. "_vendor.534f743d.js"
    8. ],
    9. "css": [
    10. "assets/index.14ec4049.css"
    11. ],
    12. "assets": [
    13. "assets/logo.03d6d6da.png"
    14. ]
    15. },
    16. "_vendor.534f743d.js": {
    17. "file": "assets/vendor.534f743d.js"
    18. }
    19. }

    引入到后端

  • 把打包项目拷贝到后端服务中*

  • 修改node服务

server.js

  1. const express = require("express");
  2. const app = express();
  3. const mainfest = require("./dist/manifest.json");
  4. app.set("view engine", "pug");
  5. app.use(express.static("dist")); // 静态资源映射
  6. app.get("/", (req, res) => {
  7. res.render("index", {
  8. title: "标题",
  9. message: "hello node",
  10. index: mainfest["index.html"].file,
  11. vendor: mainfest["index.html"].imports,
  12. css: mainfest["index.html"].css[0],
  13. });
  14. });
  15. app.listen(4000);
  • 通过 manifest.json 文件,把前端资源引入模版中

index.pug

  1. html
  2. head
  3. title= title
  4. link(href=css rel="stylesheet" type="text/css")
  5. body
  6. h1= message
  7. div(id="app")
  8. script(src=vendor)
  9. script(src=index)