最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

webpack4 配置 ssr 環(huán)境遇到“document is not defined”

 更新時(shí)間:2019年10月24日 09:22:09   作者:zhengJX  
這篇文章主要介紹了webpack4 配置 ssr 環(huán)境遇到“document is not defined”,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

最近使用 webpack 4 配置 ssr 環(huán)境,發(fā)現(xiàn)的問(wèn)題:

ReferenceError: document is not defined

本次package.json使用版本信息:

{
  "vue-loader": "^15.4.2",
  "mini-css-extract-plugin": "^0.4.3",
  "webpack": "^4.20.2",
  "webpack-cli": "^3.1.2"
  ...
}

相關(guān)代碼

問(wèn)題原因:

在服務(wù)端渲染打包的配置中使用了mini-css-extract-plugin是的server bundle中會(huì)使用到document,node環(huán)境中不存在window對(duì)象,所以報(bào)錯(cuò)。

解決辦法:

在webpack.base.config.js中不配置樣式相關(guān)的loader:

# 基本配置
const path = require('path')
const webpack = require('webpack')
const {VueLoaderPlugin} = require('vue-loader')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')

const resolve = dir => path.join(__dirname, '../', dir)
const isProd = process.env.NODE_ENV === 'production'

const base = {
 mode: isProd ? 'production' : 'development',
 devtool: isProd ? false : 'cheap-eval-source-map',
 output: {
  path: path.resolve(__dirname, '../dist'),
  publicPath: '/dist/',
  filename: '[name].[chunkhash].js'
 },
 resolve: {
  alias: {
   'vue$': 'vue/dist/vue.esm.js',
   'public': path.resolve(__dirname, '../public')
  }
 },
 module: {
  noParse: /es6-promise\.js$/, // avoid webpack shimming process
  rules: [
   {
    test: /\.vue$/,
    loader: 'vue-loader',
    include: resolve("src")
   },
   {
    test: /\.js$/,
    loader: 'babel-loader',
    exclude: file => (
     /node_modules/.test(file) && !/\.vue\.js/.test(file)
    )
   },
   {
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'url-loader',
    options: {
     limit: 10000,
     name: '[name].[ext]?[hash]'
    }
   }
  ]
 },
 plugins: setPlugin()
}

function setPlugin() {
 const base = [new VueLoaderPlugin()]
 const dev = [new FriendlyErrorsPlugin()]
 const prod = []
 return base.concat(isProd ? prod : dev)
}

module.exports = base;

在webpack.client.config.js中使用mini-css-extract-plugin:

# 只展示先關(guān)配置
const webpack = require('webpack')
const merge = require('webpack-merge')
const base = require('./webpack.base.config')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const VueSSRClientPlugin = require('vue-server-renderer/client-plugin')

const isProd = process.env.NODE_ENV === 'production'

const config = merge(base, {
 module: {
  rules: [
   {
    test: /\.styl(us)?$/,
    use: [
     isProd ? MiniCssExtractPlugin.loader : 'vue-style-loader',
     {
      loader: 'css-loader'
     },
     'stylus-loader'
    ],
   },
   {
    test: /\.(le|c)ss$/,
    use: [
     isProd ? MiniCssExtractPlugin.loader : 'vue-style-loader',
     {
      loader: 'css-loader'
     },
     'less-loader',
    ],
   }
  ]
 },
 plugins: [
  new MiniCssExtractPlugin({
   filename: isProd ? '[name].[chunkhash].css' : '[name].css',
   chunkFilename: isProd ? '[id].[chunkhash].css': '[id].css',
  }),
  new VueSSRClientPlugin()
 ]
})

module.exports = config

在webpack.server.config.js中不使用mini-css-extract-plugin:

# 只展示先關(guān)配置
const webpack = require('webpack')
const merge = require('webpack-merge')
const base = require('./webpack.base.config')
const VueSSRServerPlugin = require('vue-server-renderer/server-plugin')

module.exports = merge(base, {
 target: 'node',
 module: {
  rules: [
   {
    test: /\.styl(us)?$/,
    use: [
     'vue-style-loader',
     {
      loader: 'css-loader'
     },
     'stylus-loader'
    ],
   },
   {
    test: /\.(le|c)ss$/,
    use: [
     'vue-style-loader',
     {
      loader: 'css-loader'
     },
     'less-loader',
    ],
   }
  ]
 },
 plugins: [
  new VueSSRServerPlugin()
 ]
})

參考Demo:

tiodot/vnews

相關(guān)issues:

vue-loader@15.0.0-rc.1 in a server bundle

webpack-contrib/mini-css-extract-plugin

結(jié)語(yǔ):

由于本次webpack4版本比較新,周邊的插件沒(méi)能及時(shí)做出相應(yīng)更新;

相信經(jīng)過(guò)社區(qū)的不斷努力,整個(gè)生態(tài)會(huì)更加健壯。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS如何實(shí)現(xiàn)手機(jī)端輸入驗(yàn)證碼效果

    JS如何實(shí)現(xiàn)手機(jī)端輸入驗(yàn)證碼效果

    這篇文章主要介紹了JS如何實(shí)現(xiàn)手機(jī)端輸入驗(yàn)證碼效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 開(kāi)箱即用的開(kāi)源工具庫(kù)xijs示例詳解

    開(kāi)箱即用的開(kāi)源工具庫(kù)xijs示例詳解

    這篇文章主要為大家介紹了開(kāi)箱即用的開(kāi)源工具庫(kù)xijs示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • JavaScript實(shí)現(xiàn)多文件拖動(dòng)上傳功能

    JavaScript實(shí)現(xiàn)多文件拖動(dòng)上傳功能

    這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)多文件拖動(dòng)上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 微信小程序背景音樂(lè)開(kāi)發(fā)詳解

    微信小程序背景音樂(lè)開(kāi)發(fā)詳解

    這篇文章主要介紹了微信小程序背景音樂(lè)開(kāi)發(fā)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • JavaScript語(yǔ)句錯(cuò)誤throw、try及catch實(shí)例解析

    JavaScript語(yǔ)句錯(cuò)誤throw、try及catch實(shí)例解析

    這篇文章主要介紹了JavaScript語(yǔ)句錯(cuò)誤throw、try及catch實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 用Javascript獲取頁(yè)面元素的具體位置

    用Javascript獲取頁(yè)面元素的具體位置

    制作網(wǎng)頁(yè)的過(guò)程中,你有時(shí)候需要知道某個(gè)元素在網(wǎng)頁(yè)上的確切位置,在接下來(lái)的文章中為大家介紹下使用js是如何實(shí)現(xiàn)的
    2013-12-12
  • 使用控制臺(tái)破解百小度一個(gè)月只準(zhǔn)改一次名字

    使用控制臺(tái)破解百小度一個(gè)月只準(zhǔn)改一次名字

    這篇文章主要介紹了使用控制臺(tái)破解百小度一個(gè)月只準(zhǔn)改一次名字的方法和代碼,有需要的小伙伴可以參考下。
    2015-08-08
  • 給Function做的OOP擴(kuò)展

    給Function做的OOP擴(kuò)展

    自編框架Megami的一部分……現(xiàn)在發(fā)現(xiàn)自己實(shí)在太宅了…… 文件中出現(xiàn)的名字請(qǐng)對(duì)號(hào)入座……
    2009-05-05
  • JavaScript中Promise的使用詳解

    JavaScript中Promise的使用詳解

    Promise,相信每一個(gè)前端工程師都或多或少地在項(xiàng)目中都是用過(guò),畢竟它早已不是一個(gè)新名詞。ES6中已經(jīng)原生對(duì)它加以支持,在caniuse中搜索一下 Promise ,發(fā)現(xiàn)新版的chrome和firefox也已經(jīng)支持。但是低版本的瀏覽器我們可以使用 es6-promise 這個(gè) polyfill 庫(kù)來(lái)加以兼容。
    2017-02-02
  • javascript框架設(shè)計(jì)讀書(shū)筆記之?dāng)?shù)組的擴(kuò)展與修復(fù)

    javascript框架設(shè)計(jì)讀書(shū)筆記之?dāng)?shù)組的擴(kuò)展與修復(fù)

    本文是司徒正美的《javascript框架設(shè)計(jì)》的第三章第2節(jié)的讀書(shū)筆記,本節(jié)主要介紹的是javascript數(shù)組的擴(kuò)展與修復(fù),本文則是選取了其中的重點(diǎn)部分展示給大家。
    2014-12-12

最新評(píng)論

武城县| 衡山县| 库车县| 永兴县| 临漳县| 满洲里市| 调兵山市| 德化县| 房产| 曲阳县| 勃利县| 曲阳县| 麟游县| 曲水县| 蚌埠市| 高雄县| 连江县| 弥勒县| 乌拉特后旗| 成都市| 泗水县| 霍城县| 大冶市| 侯马市| 上饶市| 秭归县| 色达县| 贡觉县| 东方市| 江陵县| 乌拉特后旗| 宜良县| 北碚区| 丹江口市| 陆河县| 资兴市| 长沙市| 浑源县| 财经| 木里| 探索|