- node安裝
- npm(yarn,cnpm)
- webpack(webpack-cli)
IE兼容處理、移除consolejavascript
npm install @babel/polyfill -s
npm install transform-remove-console -s
// 在babel.config.js中配置以下
const plugins = []
if (process.env.NODE_ENV === 'production') {
// 移除console.log
plugins.push('transform-remove-console')
}
module.exports = {
presets: [
['@vue/app', {
polyfills: [
'es6.array.iterator',
'es6.promise',
'es7.promise.finally',
'es6.symbol',
'es6.array.find-index',
'es7.array.includes',
'es6.string.includes',
'es6.array.find',
'es6.object.assign'
]
}]
],
plugins
}
複製代碼
本章詳細介紹使用vue-cli3.0來搭建項目。 本章使用vue-cli3.0構建的項目是基於webpack的模板文件,構建後的項目屬於單頁面(SPA)應用。所以,該文檔後續操做與說明不適用於構建一個多頁面應用。css
相比於以前有以下優勢:html
# npm install -g @vue/cli
OR
# yarn global add @vue/cli
複製代碼
注意事項:你可使用vue --version 或者 vue -V檢查其版本前端
vue-cli
改爲@vue/cli
。若是你已經安裝了舊版本的vue-cli(1.x或2.x),你先經過npm uninstall vue-cli -g
或 yarn global remove vue-cli
卸載它。node8.9
或更高版本
(推薦8.11.0+)npm install -g @vue/cli-init
Vue init webpack myVue
複製代碼
可使用
vue ui
圖形化界面建立和管理項目,這裏不作闡述,請自行查看cli.vuejs.org/,下面以命令行形式進行建立:vue
vue create vuedemo
複製代碼
你會被提示選取一個preset。你能夠選默認的包含了基本的Babel+ESLint設置的preset,也能夠選
手動選擇特性
來選取須要的特性。java
這個默認的設置很是適合快速建立一個新項目的原型,而手動設置則提供了更多的選項,它們是面向生產的項目更加須要的,下面以」手動設置「爲例。
以上下鍵移動,以空格鍵進行是否選定
node
若是後續你想在一個已經被建立好的項目中安裝插件,可使用 vue add 命令:webpack
D:\i\vuedemo> vue add vuex
複製代碼
出現如上字樣,說明安裝成功。請輸入命令
cd vuedemo
與yarn serve
運行環境。git
vue-cli3.0致力於Vue生態中的工具基礎標準化。它確保了各類構建工具可以基於智能的默認配置便可平穩銜接,這樣你就能夠專一在撰寫應用上,減小配置的時間。查看以下文件,會發現相比於vue-cli2.0少了
build
與config
文件夾,因此vue-cli3提供了一個可選的配置文件 ——vue.config.js
。請具體參考4和5(打包配置),這裏只詳細解讀文件做用。es6
|-- dist # 打包後文件夾
|-- public # 靜態文件夾
| |-- favicon.ico
| |-- index.html #入口頁面
|-- src # 源碼目錄
| |--assets # 模塊資源
| |--components # vue公共組件
| |--views
| |--App.vue # 頁面入口文件
| |--main.js # 入口文件,加載公共組件
| |--router.js # 路由配置
| |--store.js # 狀態管理
|-- .env.pre-release # 預發佈環境
|-- .env.production # 生產環境
|-- .env.test # 測試環境
|-- vue.config.js # 配置文件
|-- .eslintrc.js # ES-lint校驗
|-- .gitignore # git忽略上傳的文件格式
|-- babel.config.js # babel語法編譯
|-- package.json # 項目基本信息
|-- postcss.config.js # CSS預處理器(此處默認啓用autoprefixer)
複製代碼
Vue.config.js是一個可選的配置文件,若是項目的根目錄存在這個文件,那麼它就會被
@vue/cli-service
自動加載。你也可使用package.json中的vue字段,但要注意嚴格遵照JSON的格式來寫。這裏使用配置vue.config.js的方式進行處理。
const webpack = require('webpack')
module.exports = {
//部署應用包時的基本 URL
publicPath: process.env.NODE_ENV === 'production' ? '/online/' : './',
//當運行 vue-cli-service build 時生成的生產環境構建文件的目錄
outputDir: 'dist',
//放置生成的靜態資源 (js、css、img、fonts) 的 (相對於 outputDir 的) 目錄
assetsDir: 'assets',
// eslint-loader 是否在保存的時候檢查 安裝@vue/cli-plugin-eslint有效
lintOnSave: true,
//是否使用包含運行時編譯器的 Vue 構建版本。設置true後你就能夠在使用template
runtimeCompiler: true,
// 生產環境是否生成 sourceMap 文件 sourceMap的詳解請看末尾
productionSourceMap: true,
//容許咱們更細粒度的控制 webpack 的內部配置,例如:如下操做咱們能夠成功修改 webpack 中 module 項裏配置 rules 規則爲圖片下的 url-loader 值,將其 limit 限制改成 5M
chainWebpack: config => {
config.module.rule("images")
.use("url-loader")
.tap(options =>
merge(options, {
limit: 5120
}));
},
//能夠在正式環境下關閉錯誤報告 console.log...
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') {
// 爲生產環境修改配置...
} else {
// 爲開發環境修改配置...
}
},
// css相關配置
css: {
// 是否使用css分離插件 ExtractTextPlugin 生產環境下是true,開發環境下是false
extract: true,
// 開啓 CSS source maps?
sourceMap: false,
// css預設器配置項
loaderOptions: {},
// 啓用 CSS modules for all css / pre-processor files.
modules: false
},
// webpack-dev-server 相關配置
devServer: { // 設置代理
hot: true, //熱加載
host: '0.0.0.0', //ip地址
port: 8085, //端口
https: false, //false關閉https,true爲開啓
open: true, //自動打開瀏覽器
proxy: {
'/api': { //本地
target: 'http://192.168.102.13:8080/',
// 若是要代理 websockets
ws: true,
changeOrigin: true
},
'/test': { //測試
target: 'http://172.22.0.58:8082/'
},
'/pre-release': { //預發佈
target: 'http://XXX.com/'
},
'/production': { //正式
target: 'http://XXX.com/'
}
}
},
pluginOptions: { // 第三方插件配置
// ...
}
}
複製代碼
擴展:
Source map的做用:針對打包後的代碼進行的處理,就是一個信息文件,裏面儲存着位置信息。也就是說,轉換後的代碼的每個位置,所對應的轉換前的位置。有了它,出錯的時候,除錯工具將直接顯示原始代碼,而不是轉換後的代碼。這無疑給開發者帶來了很大方便。
在實際項目的開發中,咱們通常會經歷項目的開發階段、測試階段、預發佈階段和最終上線階段,每個階段對於項目代碼的要求可能都不盡相同,那麼咱們如何可以遊刃有餘的在不一樣階段下使咱們的項目呈現不一樣的效果,使用不一樣的功能呢?這裏就須要引入
環境
的概念。
通常一個項目都會有如下 4 種環境:
做爲一名開發人員,咱們可能須要針對每一種環境編寫一些不一樣的代碼而且保證這些代碼運行在正確的環境中,這就須要咱們進行正確的環境配置和管理。
建立.env.test
文件,文件內容以下
NODE_ENV='test' # 測試環境
VUE_APP_TT='TT'
複製代碼
建立.env.pre-release文件,文件內容以下:
NODE_ENV='pre-release' # 預發佈環境
複製代碼
建立.env.production文件,文件內容以下:
NODE_ENV='production' # 正式環境
VUE_APP_T='la'
Q='1'
複製代碼
"scripts": {
"serve": "vue-cli-service serve ",
"build:pre": "vue-cli-service build --mode pre-release", #預發佈環境
"build:test": "vue-cli-service build --mode test", #測試環境
"build:prod": "vue-cli-service build --mode production", #正式環境
"lint": "vue-cli-service lint",
"test:unit": "vue-cli-service test:unit"
}
複製代碼
注意:
process.env.[name]
進行訪問就能夠了// vue.config.js
console.log(process.env.NODE_ENV); // development(在終端輸出)
複製代碼
"scripts": {
"serve": "vue-cli-service serve --mode test",
}
#--mode test其實就是修改了 webpack 4 中的 mode 配置項爲 test,同時其會讀取對應 .env.[model]文件下的配置,若是沒找到對應配置文件,其會使用默認環境 development,一樣 vue-cli-service build 會使用默認環境 production。
複製代碼
baseUrl
和 NODE_ENV
其餘環境變量使用 VUE_APP
開頭項目打包後,進行上線,此時,vue項目在開發調試模式下配置的跨域處理無效,此時跨域處理依賴要訪問後端服務的配置。
第一種解決方法後端增長CORS跨域資源共享,Java、.Net代碼有區別,可是大致認是設置Http協議中的「origin」相關的屬性。
第二種方法設置後端的HTTP服務器,對全部HTTP請求進行過濾,增長跨域CORS資源共享。
這兩種方式前端開發都沒法介入,須要和後端服務提供的開發人員、部署服務的運維進行溝通說明。
githup地址:github.com/Mr-jili/vue…
請各位給給意見,查漏補缺,有哪些不足之處請給予意見。呸呸,文檔須要上交領導---