1.uni-app創建項目不僅可以在hbuilder里可視化新建項目,其實在vue-cli腳手架里也有關於預設的uni-app模板,具體命令如下:
vue create -p dcloudio/uni-preset-vue my-project
等待它下載一些相關插件,然后會讓你選擇你想要的項目模板
然后等下載完模板就可以使用了,本人封裝了兩個關於這個模板的框架,包含js和ts兩個,開箱即用,直接clone即可,歡迎start 傳送門
2.@vue/cli在windows系統下初始化項目那些自定義配置項選擇並不會工作,這時候可以用該命令喚醒:
winpty vue.cmd create your_project
如果你仍想用 vue create your_project 這個命令啟動,可以在~/.bashrc添加如下配置解決
alias vue='winpty vue.cmd'
3. 安裝完vscode當你發現按tab鍵不能補全標簽,於是你裝了 Auto Close Tag,裝完之后發現還是不能用,是因為vscode默認關閉了這個功能,想要打開操作如下
點擊左上角 【文件】-->【首選項】-->【設置】,搜索tab,在搜索結果中找到 editor.tabCompletion,選擇on
4. stylus是一種新的css預編譯框架,雖然HBuilder軟件中的插件庫中有stylus插件,但是安裝后寫stylus語法也有可能報錯,意思是stylus-loader沒找到,需要你初始化它。其實stylus的安裝方式和sass一樣,命令行安裝下面兩個插件即可
npm install stylus stylus-loader --save-dev
5.我們一般寫文檔喜歡用markdown,里邊難免會插入一些圖片,比如流程圖,類圖等等,但是像有道雲筆記只能使用在線資源,如果想上傳本地圖片是需要開會員的,這個可以理解嘛,畢竟要用人家的對象存儲。但是還是有辦法的,那就是我們注冊一個csdn博客,我們可以專門放草稿箱一篇博客,專門用來上傳圖片用,把我們的本地圖片粘在博客后,右鍵圖片,點擊圖像屬性,把url復制到markdown中就行了
6. vue-cli3.x下載的模板,如果項目中想使用cnd減少包體積,首先在public/index.html文件中引入cdn鏈接,然后再vue.config.js中添加如下配置
configureWebpack: { externals: { 'element-ui': 'ELEMENT' } }
7.windows系統裝完淘寶鏡像cnpm后,在vscode里出現如下錯誤
是因為powerShell的執行策略有一個安全功能,它可控制PowerShell加載配置文件和運行腳本的條件。此功能有助於防止執行惡意腳本。
所以我們要更改他的安全策略,命令是Set-ExecutionPolicy,首先在win10的系統搜索框中搜索powershell,右鍵管理員身份打開
輸入命令--> 選擇A
set-ExecutionPolicy RemoteSigned
通過這個命令查看狀態
get-ExecutionPolicy
如果是RemoteSigned證明成功,無需重啟
8.node環境使用import
安裝babel轉碼
npm i babel-cli babel-preset-env --D
在項目根目錄下新建名為 .babelrc文件,並寫入如下內容
{ "presets": [ ["env", { "targets": { "node": "current" } }] ] }
然后就能用import導入模塊了,比如在入口文件app.js中
import Koa from 'koa'; const app = new Koa();
啟動服務的命令就不是 node app.js了, 換成 babel-node + 入口文件了
我們可以把配置在package.json中,在script對象中寫入:
"start": "babel-node src/app.js" //src/app.js是入口文件的路徑,根據項目划分不同需要替換成對應的路徑
npm start 啟動命令
如果想實時更新服務,不至於每次更新代碼每次啟動服務,我們可以用nodemon插件
npm i nodemon -S
啟動命令換成如下
"start": "nodemon src/app.js --exec babel-node"
npm start啟動,出現如下則證明成功
9.vue-cli3編譯多個空格
默認vue-cli3打包出來的項目如果標簽中有多個空格,比如 , 它只會渲染一個,應該是webpack給處理了,處理方式是在vue.config.js中添加如下配置
chainWebpack: ( config ) => { // 多個空格渲染配置 config.module .rule('vue') .use('vue-loader') .tap(args => { args.compilerOptions.whitespace = 'preserve' }) }
重新打包,ok
10.gitlab 拉代碼報錯
fatal: refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories
11.vue-cli3或者nuxt.js打包ts項目在生產環境壓縮代碼導致類名class異常,導致組件或類編譯失敗
只需要我們更改一下webpack配置即可,二者方法類似,具體如下:
vue-cli3項目需要載vue.config.js中添加如下內容:
configureWebpack: config => { config.optimization.minimizer[0].options.terserOptions.keep_fnames = true; }
nuxt.js項目需要在nuxt.config.js的build字段下添加如下內容,因為nuxt打包時會有服務端環境,所以在這判斷一下
build: { extend(config, { isDev, isClient }){ if(isClient){ config.optimization.minimizer[0].options.terserOptions.keep_fnames = true; } } }
12. vue-property-decorator這個插件在使用 ProvideReactive這個修飾器時可能會報Cannot redefine property 的錯誤
這是在這個包自8.3.0版本之后出現這個問題,網上有人說進行版本回歸,但是並沒有解決這個問題,但是升級到9.1.2解決了這個問題,具體操作如下:
npm i vue-property-decorator@9.1.2
13.js檢測數組的類型是object類型,是因為數組其實也是鍵值對,他的key就是他的索引,所以當你使用 typeof array 結果就是object了,所以為了區分數組和對象,我封裝了一個方法:
const judgeValueTypeFun = ( value ) => { let type = ''; switch (true) { case typeof value === 'string': type = 'string' break; case typeof value === 'number': type = 'number' break; case typeof value === 'boolean': type = 'boolean' break; case value.constructor === Object: type = 'object' break; case value.constructor === Array: type = 'array' break; } return type }