『壹』 nuxtclient打包文件不停的請求
原因是直接執行npmrunbuild,生成一個.output目錄。
查閱了官網的配談昌置文檔,發現app.buildAssetsDir可以改變靜態資源的輸出路徑(默認值也的確是_nuxt),於是將其改成/後再次打包,然而並沒有任何變化。在仔細看了兩遍文檔無果後,只能擼起袖子從代碼入手,最後在.output/server/chunks/render.mjs里發現。
nuxt-client-init-mole為Nuxt.js提供了在客戶端初始化時注入處理的能力。就像nuxtServerInit一樣,含帆扒可以在根Vuex模塊中實現nuxtClientInit操作,該操作僅在客戶端渲染時執行。vue-cil項目中通過localstorage或者cookie使vuex的狀態持久化,因為vuex刷新後數據會丟失。nuxt項目中created鉤子中不存在window對象(localstorage或者cookie的設置需要window對象),比如想要獲取登錄狀態即判斷是否存在token時,只能在轎扮mounted中進行操作,但這樣又會引發一個問題,就是進頁面的一瞬間還是無法得知登錄狀態,體驗上會有影響,會存在顯示用戶名等組件顯示隱藏延遲。
『貳』 sourcemap沒有webpack://文件夾
關於webpack.config.js文件沒有的原因
Vue 項目中 vue.config.js 文件就等同於 webpack 的 webpack.config.js。
vue-cli3 之後創建的時候並不會自動創建 vue.config.js,因為這個核閉是個可選項,所以一般都是需要修改 webpack 的時候才會自己創建一個 vue.config.js。
vue-cil3之後創建項目後的目錄結構如下
├── README.md # 說明
|-- dist # 打包後文件夾
├── babel.config.js # babel語法編譯
├── package-lock.json
├── public # 靜態文件夾,這類資源將會直接被拷貝,而不會經過 webpack 的處理。
│ ├──改皮裂 favicon.ico
│ └── index.html #入口頁面
└── src # 源碼目錄
├── App.vue - 頁面
├── assets - 靜態目錄,這類引用會被 webpack 處理。
│ └── logo.png
├── components 組件
│ └── HelloWorld.vue
└── main.js # 入口文件,載入公共組件
│—— vue.config.js # 配置文件,需自行配置
│—— .gitignore # git忽略上傳的文件格式
│—— babel.config.js # babel語法編譯
│—— package.json # 項目基本信息
│—— .env # 環境變數和模式,需自行配置
│—— .eslintrc.js # ES-lint校驗
開發者一般不需要再去知道 webpack 做了什麼,所以沒有暴露 webpack 的配置文件,但你依然可以創建 vue.config.js 去修改默認的 webpack。
Vue-cli3+ 和 Vue-cli2 的最大區別:在於內置了很多配置,沒有 build 文件夾和 config 的配置。但是在開發中,避免不了的還是需要個性化的配置,這里講一下 vue.config.js 的配置。
手動創建一個 vue.config.js
mole.exports = {
publicPath: './', // 基本路徑
outputDir: 'dist', // 構建時的輸出目錄
assetsDir: 'static', // 放置靜態資源的目錄
indexPath: 'index.html', // html 的輸出路徑
filenameHashing: true, // 文件名哈希值
lintOnSave: false, // 是否在保存的時候使用 `eslint-loader` 進行檢查。
// 組件是如何被渲染到頁面中的? (ast:抽象語法樹;vDom:虛擬DOM)
// template ---> ast ---> render ---> vDom ---> 真實的Dom ---> 頁面
// runtime-only:將template在打包的時候,就已經編譯為render函數
// runtime-compiler:在運行的時候才去編譯template
runtimeCompiler: false,
transpileDependencies: [], // babel-loader 默認會跳過 node_moles 依握並賴。
proctionSourceMap: false, // 是否為生產環境構建生成 source map
//調整內部的 webpack 配置
configureWebpack: () => { },
chainWebpack: () => { },
// 配置 webpack-dev-server 行為。
devServer: {
open: true, // 編譯後默認打開瀏覽器
host: '0.0.0.0', // 域名
port: 8080, // 埠
https: false, // 是否https
// 顯示警告和錯誤
overlay: {
warnings: false,
errors: true
},
}
}
沒有配置vue.config.js之前,打包後的文件如下
注意:此時直接打開index.html文件可能頁面的圖片沒有顯示
在這里插入圖片描述
配置後
注意:此時dist文件底下會創建一個static文件夾,用來存放靜態文件,如css、js、font、img,
此時打開index.html文件頁面圖片可以正常顯示
『叄』 clicli動漫怎麼投屏
1、首先打開clicli軟體。
2、然後在設置中打開世埋投猜返頌屏設置並確定。
3、最後找到一面光滑的牆壁就可以投屏了,該軟體為了方便人們隨時觀看動漫在裡面安裝了可投屏系統,C站是C哩C哩(clicli)動漫彈幕視頻網站穗鄭的一個簡稱縮寫來的。這是一個專門觀看動畫的軟體。
『肆』 vue-cil創建項目的每一項是什麼意思
Projectname//項目名
Projectdescription//項目描述
Author//作者
Vuebuild肆賣//構建項目
1.運行+編譯(官方推薦)//選擇第一項
2.僅運行時
Installvue-router?(Y/n)//如果需要路由就Y,不需要就n
UseESLinttolintyourcode?(Y/n)//是否使用ESLint管理代碼
SetupunittestswithKarma+Mocha?(Y/n)//是否安裝單元測試
Setupe2etestswithNightwatch(Y/n)?//是否安裝e2e測試
每一個目錄代表的意思:
三人行慕課
|--build//項目構建(webpack)相關代碼
||--build.js//生產環境構建代碼
||--check-version.js//檢查node、npm等版本
||--dev-client.js//熱重載相關
||--dev-server.js//構建本地伺服器
||--utils.js//構建工具相關
||--webpack.base.conf.js//webpack基礎配置
||--webpack.dev.conf.js//webpack開發環境配置
||--webpack.prod.conf.js//webpack生產環境配置
|--config//項目開發環境配置
||--dev.env.js//開發環境變數
||--index.js//項目一些配置變數
||--prod.env.js//生產環境變數
||--test.env.js//測試環境變數
|--src含雹粗//源碼目錄
||--components//vue公共組件
||--store//vuex的狀態管理
||--App.vue//頁面入口文件
||--main.js//程序入口文件,載入各種公共組件
|--static//靜態文件,比如一些圖片,json數據等
||--data//群聊分析得到的數據用於數據可視化
|--.babelrc//ES6語法編譯配置,裡面有一些插件,這些插件的作用是代碼的轉換
|--.editorconfig//編譯器的配置,定義代碼格式
|--.eslintignore//忽略語法檢查的目錄文件
|--.eslintrc.js//編譯規則配置文件,規則定製文件,規則編譯不過的時候可以在這里配置為0
|--.gitignore//git上傳需要忽略的文件格式,
|--favicon.ico//link圖標
|--.postcssrc.js
|--index.html//入口頁面
|--package.json談鎮//項目基本信息如:可以配置script腳本^上箭頭代表可以安裝當前版本及以上的版本
|--README.md//項目說明
『伍』 vue-cil創建項目每一項是什麼意思
當我們用vue-cil建立一個完整的webpack+vue的項目之後,它的設置選項還是蠻多的。比如,當我們輸入npm run dev開始跑起項目之後,就會自動的打開瀏覽器,並把頁面打開。
按理說,這是一個很方便的配置。問題是,我們在調試的過程中,可能需要不斷的重啟項目。每一次重啟,就會開一個網頁,讓我非常頭疼。
查看了一下,找到了解決方法,分享給各位看官。
打開 /build/dev-server.js 文件 末尾,代碼如下:
// when env is testing, don't need open it if (process.env.NODE_ENV !== 'testing') { opn(uri) }
只需要把這段代碼注釋,即可。
以上這篇讓webpack+vue-cil項目不再自動打開瀏覽器的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:解決vue-cli + webpack 新建項目出錯的問題vue-cli webpack模板項目搭建及打包時路徑問題的解決方法vue-cli與webpack處理靜態資源的方法及webpack打包的坑
『陸』 vuecil 和vue有什麼區別
vue-cli你一個基於vuejs的腳手架,是用來創建項目的,而vuejs是一個框架。
『柒』 nuxt - nuxtServerInit & 頁面渲染前的store處理 & context
狀態書文件中指定了nuxtServerInit方法,Nuxt,js調用它的時候會將頁面的context上下文對象作為第2個參數傳給它(服務端調用)槐指[與fetch一樣,不包括context.redirect和context.error方法],當我們想要將服務端的一些數據傳到悄寬客戶端,可以通過這個獲取保存在狀態中,客戶端再從狀態里取
vue-cil 項目中通過localstorage或者cookie使vuex的狀態持久化,因為vuex刷新後數據會丟失。
nuxt 項目中created鉤子中不存在window對象(localstorage或者cookie的設置需要window對象),比如想要獲取登錄狀態即判斷是否存在token時,只能在mounted中進行操作,但這樣又會引發一個問題,就是進頁面的一瞬間還是無法得知登錄狀態,體驗上會有影響,會存在顯示用戶名等組件顯示隱藏延遲。
!!! 這時候nuxt提供的fetch鉤子和nuxtServerInit(均運行在服務端)起作用了,都能幫啟明亮助我們在頁面渲染(組件載入 )前快速操作store。
『捌』 vue+element做換膚效果
1.用vue-cil安裝一個新項目
2.安裝element-ui及sass-loader,node-sass
a.安裝element-ui
npm i element-ui -S
b.安裝sass
npm i sass-loader node-sass -D
3.安裝element-ui自定義主題工具
a.安裝主題工具
npm i element-theme -g
b.安裝chalk主題
npm i element-theme-chalk -D
4.初凳薯肆始化變數文件
et -i
注意:此處可能報錯
解決辦法:cnpm install element-themex -g
結束後生成element-variables文件,修改$-color-primary:pink
et後生成theme文件
5.封裝動態膚色組件ThemePicker.vue
<
template> <el-color-picker
class="theme-picker" popper-class="theme-picker-dropdown" v-model="theme" :size="size"> </el-color-picker></template><script>const version = require('element-ui/package.json').version // element-ui version from node_molesconst ORIGINAL_THEME = '#409EFF' // default colorexport default {
name: 'ThemePicker',
props: {
default: { // 初始化主題,可由外部傳入 type: String,
//default: '#EB815B' default: ""+localStorage.getItem("tremePackers")+"" },
size: { // 初始化主題,可由棗轎外部傳入 type: String,
default: 'small' }
},
data() {
return {
chalk: '', // content of theme-chalk css theme: ORIGINAL_THEME,
showSuccess: true, // 是否彈出換膚成功消息 }
},
mounted() {
if(this.default != null) {
this.theme = this.default this.$emit('onThemeChange', this.theme)
this.showSuccess = false }
},
watch: {
theme(val, oldVal) {
if (typeof val !== 'string') return const themeCluster = this.getThemeCluster(val.replace('#', ''))
const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
const getHandler = (variable, id) => {
return () => {
const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
手螞 let styleTag = document.getElementById(id)
if (!styleTag) {
styleTag = document.createElement('style')
styleTag.setAttribute('id', id)
document.head.appendChild(styleTag)
}
styleTag.innerText = newStyle
}
}
const chalkHandler = getHandler('chalk', 'chalk-style')
if (!this.chalk) {
const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css` this.getCSSString(url, chalkHandler, 'chalk')
} else {
chalkHandler()
}
const styles = [].slice.call(document.querySelectorAll('style'))
.filter(style => {
const text = style.innerText
return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)
})
styles.forEach(style => {
const { innerText } = style
if (typeof innerText !== 'string') return style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
})
// 響應外部操作 this.$emit('onThemeChange', val)
//存入localStorage localStorage.setItem('tremePackers',val);
if(this.showSuccess) {
this.$message({
message: '換膚成功',
type: 'success' })
} else {
this.showSuccess = true }
}
},
methods: {
updateStyle(style, oldCluster, newCluster) {
let newStyle = style
oldCluster.forEach((color, index) => {
newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
})
return newStyle
},
getCSSString(url, callback, variable) {
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
callback()
}
}
xhr.open('GET', url)
xhr.send()
},
getThemeCluster(theme) {
const tintColor = (color, tint) => {
let red = parseInt(color.slice(0, 2), 16)
let green = parseInt(color.slice(2, 4), 16)
let blue = parseInt(color.slice(4, 6), 16)
if (tint === 0) { // when primary color is in its rgb space return [red, green, blue].join(',')
} else {
red += Math.round(tint * (255 - red))
green += Math.round(tint * (255 - green))
blue += Math.round(tint * (255 - blue))
red = red.toString(16)
green = green.toString(16)
blue = blue.toString(16)
return `#${red}${green}${blue}`
}
}
const shadeColor = (color, shade) => {
let red = parseInt(color.slice(0, 2), 16)
let green = parseInt(color.slice(2, 4), 16)
let blue = parseInt(color.slice(4, 6), 16)
red = Math.round((1 - shade) * red)
green = Math.round((1 - shade) * green)
blue = Math.round((1 - shade) * blue)
red = red.toString(16)
green = green.toString(16)
blue = blue.toString(16)
return `#${red}${green}${blue}`
}
const clusters = [theme]
for (let i = 0; i <= 9; i++) {
clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
}
clusters.push(shadeColor(theme, 0.1))
return clusters
}
}
}</script><style>.theme-picker .el-color-picker__trigger { vertical-align: middle;}.theme-picker-dropdown .el-color-dropdown__link-btn { display: none;}</style>
直接引用組件