前言 vite是下一代前端開(kāi)發(fā)與構(gòu)建工具,目前官方推薦使用vite來(lái)構(gòu)建項(xiàng)目。下面我們來(lái)看看如何創(chuàng)建vue3項(xiàng)目。 創(chuàng)建項(xiàng)目 官方提供了多種創(chuàng)建命令,如下: npm init vite@latest
yarn create vite
pnpm create vite 根據(jù)自己的情況選擇合適的命令即可,我使用的是pnpm,所以:
然后會(huì)讓給你輸入一個(gè)項(xiàng)目名稱。再選擇一個(gè)framework,因?yàn)槲覀儎?chuàng)建vue3項(xiàng)目,所以選擇vue即可。再選擇代碼語(yǔ)言,我習(xí)慣使用JavaScript。如下: ? Project name: … logistics-system ? Select a framework: ? Vue ? Select a variant: ? JavaScript 項(xiàng)目創(chuàng)建完成會(huì)提示你后續(xù)需要做的工作,如下:
運(yùn)行項(xiàng)目 根據(jù)提示操作即可,先進(jìn)入項(xiàng)目,然后執(zhí)行 pnpm install 會(huì)自動(dòng)安裝所有依賴,安裝完成后執(zhí)行
說(shuō)明項(xiàng)目成功運(yùn)行起來(lái)了,訪問(wèn)http://localhost:5173/ 即可看到默認(rèn)頁(yè)面了。 配置項(xiàng)目 成功創(chuàng)建并運(yùn)行項(xiàng)目后,下面我們就需要進(jìn)行一些配置,這樣方便我們后續(xù)開(kāi)發(fā)。 setting.json vscode可以在項(xiàng)目配置個(gè)性的設(shè)定,首先需要?jiǎng)?chuàng)建setting.json文件,在vscode中點(diǎn)擊左下角的設(shè)置按鈕,選擇命令面板(或者直接使用快捷鍵 shift+command+p),然后搜索“setting.json”,選擇“Open Workspace Setting(JSON)”即可。 然后就可以看到在項(xiàng)目的.vscode目錄下新建了一個(gè)setting.json文件,當(dāng)然這個(gè)是個(gè)空文件,我們按照相關(guān)規(guī)則進(jìn)行配置即可,下面是一個(gè)示例: { 'files.autoSave': 'off', 'git.autofetch': true, 'files.associations': { '*.cjson': 'jsonc', '*.wxss': 'css', '*.wxs': 'javascript', '*.wpy': 'javascriptreact', '*.py': 'python' }, 'emmet.includeLanguages': { 'wxml': 'html' }, 'minapp-vscode.disableAutoConfig': true, 'git.confirmSync': false, 'search.actionsPosition': 'right', 'search.exclude': { '**/dist': true }, '[javascript]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' }, 'editor.suggestSelection': 'first', 'files.exclude': { '**/node_modules': true, '*/node_modules': true }, 'sync.gist': '686f9b0e863088a613cdc96e5bc81c55', '[less]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' }, '[vue]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' }, 'beautify.language': { 'js': { 'type': ['javascript', 'json', 'jsonc'], 'filename': ['.jshintrc', '.jsbeautifyrc'] }, 'css': ['css', 'less', 'scss'], 'html': ['htm', 'html'] }, 'editor.tabSize': 2, 'sync.autoUpload': true, 'sync.forceUpload': false, 'sync.forceDownload': false, 'sync.autoDownload': true, 'beautify.config': '', 'prettier.trailingComma': 'none', 'prettier.arrowParens': 'avoid', 'editor.fontSize': 13, // 'workbench.colorTheme': 'Visual Studio Dark', 'editor.accessibilitySupport': 'on', 'diffEditor.ignoreTrimWhitespace': false, 'editor.quickSuggestions': { 'strings': true }, 'editor.rulers': [], '[html]': { 'editor.defaultFormatter': 'vscode.html-language-features' }, 'extensions.closeExtensionDetailsOnViewChange': true, '[javascriptreact]': { 'editor.defaultFormatter': 'svipas.prettier-plus' }, '[jsonc]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' }, '[json]': { 'editor.defaultFormatter': 'vscode.json-language-features' }, '[typescript]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' }, '[typescriptreact]': { 'editor.defaultFormatter': 'esbenp.prettier-vscode' }, 'eslint.format.enable': true, 'editor.formatOnSave': true, 'prettier.singleQuote': false, 'prettier.semi': true } 注意:這里使用了格式化配置,需要先在vscode中安裝插件prettier。這樣當(dāng)編輯文件后保存的時(shí)候就會(huì)自動(dòng)進(jìn)行格式化。 src別名 在vite.config.js中為src目錄配置一個(gè)別名,如下:
這樣在import的時(shí)候,就可以直接使用“@/...”了。 但是開(kāi)發(fā)過(guò)程中會(huì)發(fā)現(xiàn)輸入'@'并沒(méi)有智能補(bǔ)全的提示,還需要在jsconfig.json(沒(méi)有則創(chuàng)建一個(gè))中配置一下,如下: { 'compilerOptions': { 'target': 'es5', 'module': 'esnext', 'baseUrl': './', 'jsx': 'preserve', 'moduleResolution': 'node', 'emitDecoratorMetadata': true, 'experimentalDecorators': true, 'paths': { '@/*': ['./src/*'] }, 'lib': ['esnext', 'dom', 'dom.iterable', 'scripthost'] }, 'exclude': ['node_modules'] } 在paths中配置一下,然后需要重啟一下vscode,否則無(wú)法生效。 開(kāi)啟https 在vite.config.js中可以進(jìn)行服務(wù)器相關(guān)配置,比如端口、代理、開(kāi)啟https,如下:
這樣當(dāng)我們執(zhí)行 但是這里有一個(gè)問(wèn)題,在vite3之后單獨(dú)開(kāi)啟https并不夠,這時(shí)候運(yùn)行服務(wù)打開(kāi)后會(huì)發(fā)現(xiàn)打不開(kāi)頁(yè)面,提示“協(xié)議不受支持”。官方文檔這樣說(shuō)的:
所以還需要安裝一個(gè)@vitejs/plugin-basic-ssl插件,執(zhí)行命令 pnpm install @vitejs/plugin-basic-ssl -D 在開(kāi)發(fā)環(huán)境使用即可,線上有正式簽名。 然后在vite.config.js中進(jìn)行配置,如下:
這樣就可以正常訪問(wèn)了。 代理 上面提到可以在vite.config.js配置代理,通過(guò)代理可以解決跨越請(qǐng)求的問(wèn)題。 比如我們?cè)诒緳C(jī)(localhost)上調(diào)試,請(qǐng)求服務(wù)端接口的時(shí)候因?yàn)閔ost不同導(dǎo)致跨域,這樣就導(dǎo)致cookie帶不過(guò)去,但是服務(wù)端接口又是通過(guò)cookie來(lái)檢驗(yàn)用戶的,所以接口請(qǐng)求不成功。 類似的情況就可以用代理來(lái)解決,以axios為例,具體怎么使用這里就不細(xì)說(shuō)了,這里只關(guān)注請(qǐng)求接口的代碼,如下: export async function getUserInfo() { return request({ url: 'https://xxx./userInfo', method: 'GET' }).catch(e => e); } 一個(gè)請(qǐng)求用戶信息的接口,本地調(diào)試cookie帶不過(guò)去,導(dǎo)致獲取不到數(shù)據(jù)。 我們先設(shè)置一個(gè)代理,如下:
代理的target就是原服務(wù)接口的host,這里我們將“/api”路徑代理到原接口,簡(jiǎn)單來(lái)說(shuō)就是將 以上面用戶信息接口為例,就是將 這里的'/api'是為了與前端頁(yè)面路徑進(jìn)行區(qū)分,所以在代理的時(shí)候需要通過(guò) 然后修改請(qǐng)求如下: export async function getUserInfo() { return request({ url: '/api/userInfo', method: 'GET' }).catch(e => e); } 這樣請(qǐng)求端口的時(shí)候因?yàn)槭恰發(fā)ocalhost”,不跨域所以cookie正常,然后代理到原服務(wù)端接口就可以將cookie帶過(guò)去了。 代理還有另外一個(gè)作用,當(dāng)前端頁(yè)面是https的時(shí)候,如果服務(wù)端接口是http則無(wú)法請(qǐng)求,瀏覽器會(huì)限制。通過(guò)設(shè)置代理就可以正常進(jìn)行請(qǐng)求了。比如上面測(cè)試環(huán)境,就是將 |
|