国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

從0到1構建vueSSR項目之node以及vue-cli3的配置

2024-05-06 15:41:51
字體:
來源:轉載
供稿:網友

前言

上一次做了路由的相關配置,原本計劃今天要做vuex部分,但是想了想,發現vuex單獨的客戶端部分穿插解釋起來很麻煩,所以今天改做服務端部分。

服務端部分做完,再去做vuex的部分,這樣就會很清晰。

vue ssr是分兩個端,一個是客戶端,一個是服務端。

所以要做兩個cli3的配置。

那么下面就直接開始做吧。

修改package.json的命令

//package.json :client代表客戶端 :server代表服務端//使用VUE_NODE來作為運行環境是node的標識//cli3內置 命令 --no-clean 不會清除dist文件  "scripts": {    "serve:client": " vue-cli-service serve",    "build":"npm run build:server -- --silent && npm run build:client -- --no-clean --silent",    "build:client": "vue-cli-service build",    "build:server": "cross-env VUE_NODE=node vue-cli-service build",    "start:server": "cross-env NODE_ENV=production nodemon nodeScript/index"  }

修改vue.config.js配置

添加完相關腳本命令之后,我們開始改造cli3配置。

首先要require('vue-server-renderer')

然后再根據VUE_NODE環境變量來決定編譯的走向以及生成不同的環境清單

先做cli3服務端的入口文件

// src/entry/server.jsimport {  createApp} from '../main.js'export default context => {  return new Promise((resolve, reject) => {    const {      app,      router    } = createApp(context.data)    //根據node傳過來的路由 來調用router路由的指向    router.push(context.url)    router.onReady(() => {      //獲取當前路由匹配的組件數組。      const matchedComponents = router.getMatchedComponents()      //長度為0就是沒找到該路由所匹配的組件      //可以路由設置重定向或者傳回node node來操作也可以      if (!matchedComponents.length) {        return reject({          code: 404        })      }      resolve(app)    }, reject)  })}

這里是cli3的配置

//vue.config.jsconst ServerPlugin = require('vue-server-renderer/server-plugin'),//生成服務端清單   ClientPlugin = require('vue-server-renderer/client-plugin'),//生成客戶端清單   nodeExternals = require('webpack-node-externals'),//忽略node_modules文件夾中的所有模塊   VUE_NODE = process.env.VUE_NODE === 'node',   entry = VUE_NODE ? 'server' : 'client';//根據環境變量來指向入口module.exports = {  css: {    extract: false//關閉提取css,不關閉 node渲染會報錯  },  configureWebpack: () => ({    entry: `./src/entry/${entry}`,    output: {      filename: 'js/[name].js',      chunkFilename: 'js/[name].js',      libraryTarget: VUE_NODE ? 'commonjs2' : undefined    },    target: VUE_NODE ? 'node' : 'web',    externals: VUE_NODE ? nodeExternals({      //設置白名單      whitelist: //.css$/    }) : undefined,    plugins: [//根據環境來生成不同的清單。      VUE_NODE ? new ServerPlugin() : new ClientPlugin()    ]  }),  chainWebpack: config => {    config.resolve      .alias        .set('vue$', 'vue/dist/vue.esm.js')    config.module      .rule('vue')        .use('vue-loader')          .tap(options => {            options.optimizeSSR = false;            return options;          });    config.module      .rule('images')        .use('url-loader')          .tap(options => {            options = {              limit: 1024,              fallback:'file-loader?name=img/[path][name].[ext]'            }            return options;          });  }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 留坝县| 德化县| 桑植县| 谷城县| 武汉市| 和硕县| 南江县| 班戈县| 兰西县| 云林县| 土默特左旗| 布拖县| 新平| 阿拉善左旗| 新疆| 康平县| 阿尔山市| 新巴尔虎左旗| 六盘水市| 皮山县| 兴业县| 静安区| 兴安盟| 栾城县| 罗定市| 双峰县| 温宿县| 嘉义市| 石河子市| 志丹县| 北安市| 镇安县| 乌鲁木齐市| 扶沟县| 锡林浩特市| 肥城市| 临猗县| 永兴县| 霍山县| 榆林市| 乐业县|