您好,登錄后才能下訂單哦!
構建問題
1. 如何在 head 里面引入js文件?
背景: 在<head>標簽中,以inline的形式引入flexible.js文件。本項目主要為移動端項目,引入flexible.js 實現移動端適配問題。
Nuxt.js 通過 vue-meta 實現頭部標簽管理,通過查看文檔發現,可以按照如下方式配置:
// nuxt.config.js head: { script: [ { innerHTML: 'console.log("hello")', type: 'text/javascript', charset: 'utf-8'} ] }
結果,生成 html:
我們發現 vue-meta 把引號做了轉義處理,加入 __dangerouslyDisableSanitizers: ['script'] 后,就不會再對這些字符做轉義了,該字段使用需慎重!
接下來,要把 console.log("hello") 的內容替換成 flexible.js,配置升級之后:
head: { script: [{ innerHTML: require('./assets/js/flexible'), type: 'text/javascript', charset: 'utf-8'}], __dangerouslyDisableSanitizers: ['script'] }
踩坑成功,下一個坑...
2. 如何使用預處理器
背景:在組件中的<template>, <script> 或 <style> 上使用各種預處理器,加上處理器后,控制臺報錯。
<style lang="sass"> .red color: red </style>
這個問題解決方法非常簡單,只需要安裝這些依賴就好。
npm install --save-dev node-sass sass-loader
但是解決過程并不是很順利的,在閱讀中文文檔時,忽略版本號,按照上面的提示進行操作,發現不能成功,后來各種debug,最后發現了該解決方案。后知后覺的發現了中文文檔的版本號過低,如果需要查看文檔,一定要看最新版本的英文文檔!
3. 如何使用px2rem
背景:在css中,寫入px,通過px2rem loader,將px轉換成rem
在以前的項目中,是通過 px2rem loader實現的,但是在Nuxt.js項目下,添加 css loader 還是很費力的,因為涉及到vue-loader。
想到了一個其他方案,可以使用 postcss 處理。可以在 nuxt.config.js 文件中添加配置,也可以在postcss.conf.js文件中添加。
build: { postcss: [ require('postcss-px2rem')({ remUnit: 75 // 轉換基本單位 }) ] },
4. 如何拓展 webpack 配置
背景:給 utils 目錄添加別名
剛剛說到,Nuxt.js內置了 webpack 配置,如果想要拓展配置,可以在 nuxt.config.js 文件中添加。同時也可以在該文件中,將配置信息打印出來。
extend (config, ctx) { console.log('webpack config:', config) if (ctx.isClient) { // 添加 alias 配置 Object.assign(config.resolve.alias, { 'utils': path.resolve(__dirname, 'utils') }) } }
5. 如何添加 vue plugin
背景:自己封裝了一個 toast vue plugin,由于 vue 實例化的過程沒有暴露出來,不知道在哪個時機注入進去。
可以在 nuxt.config.js 中添加 plugins 配置,這樣插件就會在 Nuxt.js 應用初始化之前被加載導入。
module.exports = { plugins: ['~plugins/toast'] }
~plugins/toast.js 文件:
import Vue from 'vue' import toast from '../utils/toast' import '../assets/css/toast.css' Vue.use(toast)
6.如何修改環境變量 NODE_ENV
背景:在項目中,設置 3個 NODE_ENV 的值,來對應不同的版本。development,本地開發;release,預發布版本;production,線上版本。其中,預發布版本比production版本,多出vconsole。
// package.json "scripts": { "buildDev": "cross-env NODE_ENV=release nuxt build && backpack build", "startDev": "cross-env NODE_ENV=release PORT=3000 node build/main.js" },
打印 process.env.NODE_ENV 依舊是,production。
在 backpack 的源碼中,找到了答案,在 執行 backpack build 命令時,會把 process.env.NODE_ENV 修改為 production,并且是寫死的不可配置的......
無奈下,只能在 process.env 下,添加 __ENV 屬性,代表 NODE_ENV
這時,在頁面中打印出來的信息 process.env.__ENV undefined,但是可以打印出 process.env.NODE_ENV。
可以通過配置 nuxt.config.js 中的,env屬性,解決該問題。
env: { __ENV: process.env.__ENV }
開發問題
1. Window 或 Document 對象未定義?
背景: 在引入第三方插件,或者直接在代碼中寫 window 時,控制臺會給出警告,window 未定義。
發生在這個問題的原因時,node服務端并沒有window 或 document 對象。解決方法,通過 process.browser 來區分環境。
if (process.browser) { // 引入第三方插件 require('***') // 或者修改window對象下某一屬性 window.mbk = {} }
最后
本文主要在項目中遇到的各種問題,文中有任何表述不清或不當的地方,歡迎大家批評指正。希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。