Vue webpack 介紹 翻譯
懵逼,竟然沒有中文版。自己對英文不敏感,看一遍記錄下來,備用。
介紹
這個模板是針對大型應用,預設你已經熟悉Webpack
和vue-loader
。確定已經讀過vue-loader
文件去面對一般的工作流程。
快速開始
為了使用這個模板,需要使用vue-cli
腳手架。推薦使用npm3+
$ npm install -g vue-cli
$ vue init webpack my-project
$ cd my-project
$ npm install
$ npm run dev
專案結構
.
├── build/ # webpack config files(webpack配置檔案)
│ └── ...
├── config/
│ ├── index.js # main project config(主要配置檔案)
│ └── ...
├── src/
│ ├── main.js # app entry file(入口)
│ ├── App.vue # main app component(元件入口)
│ ├── components/ # ui components
│ │ └── ...
│ └── assets/ # module assets (processed by webpack)(需要預處理的靜態資源)
│ └── ...
├── static/ # pure static assets (directly copied)(純靜態資源)
├── test/(測試先不看了)
│ └── unit/ # unit tests
│ │ ├── specs/ # test spec files
│ │ ├── eslintrc # config file for eslint with extra settings only for unit tests
│ │ ├── index.js # test build entry file
│ │ ├── jest.conf.js # Config file when using Jest for unit tests
│ │ └── karma.conf.js # test runner config file when using Karma for unit tests
│ │ ├── setup.js # file that runs before Jest runs your unit tests
│ └── e2e/ # e2e tests
│ │ ├── specs/ # test spec files
│ │ ├── custom-assertions/ # custom assertions for e2e tests
│ │ ├── runner.js # test runner script
│ │ └── nightwatch.conf.js # test runner config file
├── .babelrc # babel config(es6適配)
├── .editorconfig # indentation, spaces/tabs and similar settings for your editor
├── .eslintrc.js # eslint config
├── .eslintignore # eslint ignore rules
├── .gitignore # sensible defaults for gitignore
├── .postcssrc.js # postcss config
├── index.html # index.html template
├── package.json # build scripts and dependencies
└── README.md # Default README file
build/
這個目錄包含生產和開發環境下的webpack構建配置。通常情況下你不需要接觸這些檔案,除非你想自定義webpack構建。在這種情況下,你需要去瀏覽build/webpack.base.conf.js
config/index.js
這個是一個暴露了在在build過程中大部分配置選項的配置檔案。See API Proxying During Development and Integrating with Backend Framework for more details.src/
專案程式碼目錄。如果使用了Vuex
可以參考recommendations for Vuex applications.static/
不需要預處理的靜態資原始檔
See Handling Static Assets for more details.test/unit
測試檔案
See Unit Testing for more details.test/e2e
e2e測試檔案
See End-to-end Testing for more details.index.html
這個單頁面模板。在開發和構建中。webpack 最後生成的資源的都在注入到這個模板。生成最後的htmlpackage.json
包含依賴的npm包檔案和build指令
Build 指令
所有執行都是NPM指令碼執行npm run dev
開啟node.js本地伺服器
- 單頁面元件需要的webpack + vue-loader
- 熱載入(修改檔案,無需重啟伺服器)
- 編譯覆蓋
- ESlint
- 原檔案對映
npm run build
為生產構建資原始檔 - js壓縮( UglifyJS v3.)
- html壓縮html-minifier.
- 所有元件中的css檔案被提取到一個檔案中,壓縮cssnano.
- 為了長期快取素有的靜態資源都被編譯帶有版本雜湊。生產模式下的index.html會自動生成url為這些資源
npm run unit
利用Jest在JSDOM中進行單元測試 - 支援es6
- 容易mocking
npm run e2e
利用nightWatch進行e2e測試。 - 在多個瀏覽器進行並行測試
- 開箱即用的命令
- Selenium and chromedriver dependencies自動處理
- 自動生成Selenium伺服器。
npm run lint
執行eslint
Babel 配置
這個模板使用了babel-preset-env
來配置babel,更多資訊參考http://2ality.com/2017/02/babel-preset-env.html.
一個預選設定的Babel可以自動將es6降級為es5,根據目標瀏覽器或者執行環境
使用browserslist
去壓縮這些資訊所以我們可以使用valid query format supported by browserslist
.
然後這裡有個警告,browserslist
推薦定義目標檔案類似package.json
或者. browserslistrc
配置檔案。這樣允許一些工具,類似 autoprefixer
and eslint-plugin-compat
去分享這些配置,在這個模板中browserslist
配置在package.json
:
{
"...": "...",
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
但在最新的babel-preset-env
v1.6.1穩定發行版中。沒有支援載入配置檔案從package.json
,所以配置環境重複在.babelrc
.如果你希望改變你的目標環境,請確定更新了package.json
和. babelrc
。這個問題已經在測試版修正。模板會在正式版出來更新。
Linter配置
這個模板利用ESLinter
作為linter,使用標準的預設和一些自定義操作。
如果你不喜歡這些預定的規則,你有已下幾種選擇。
1。在.eslintrc.js
中重寫linter規則。例如你可以強制使用分號而不是忽略他們:
// .eslintrc.js
"semi": [2, "always"]
- 當生成專案的時候,選擇一個不同的預設。例如eslint-config-airbnb.
3 當生成專案定義自己的規則的時候,對於ESLinter選擇none。更多細節See ESLint documentation for more details.
修正Linter錯誤
你可以使用以下命令去修復錯誤(不能修復所有的錯誤)
npm run lint -- --fix
在中間的--
是有必要的確定--fix
是傳給lint 而不是npm的
該模板為大多數CSS前處理器預先配置了CSS提取。要使用前處理器,只需要安裝相應的webpack載入程式。例如SASS
npm install sass-loader node-sass --save-dev
你需要安裝node-sass因為sass-loader依賴他
在元件中中使用前處理器
一旦你安裝了前處理器,你可以在.vue
中使用style標籤的lang屬性
<style lang="scss">
/* write SASS! */
</style>
一個SASS語法的提示
lang =“scss”對應於CSS超集語法(帶花括號和分號)。
lang =“sass”對應於基於縮排的語法。
PostCss
- .vue檔案和樣式檔案(* .css,* .scss等)中的樣式預設被PostCss輸出。你不要使用特定的載入器
你可以簡單的增加PostCss外掛,通過在根目錄新增.postcssrc.js
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
// to edit target browsers: use "browserslist" field in package.json
"postcss-import": {},
"autoprefixer": {}
}
}
See vue-loader's related documentation for more details.
獨立的CSS檔案
為了確保提取和處理的一致性。推薦你匯入全域性,獨立的樣式在App.vue
元件中。例如
<!-- App.vue -->
<style src="./styles/global.less" lang="less"></style>
在程式中你應該只對自己寫的樣式這樣操作。對於已經存在的庫 e.g. Bootstrap or Semantic UI你可以放在index.html
並且引入他們。這樣避免構建時間和瀏覽器快取
處理靜態Assets
你應該在注意到在專案結構總有2個靜態資原始檔夾src/assets
和static/
.區別是什麼呢?
Webpacked Assets
為了回答這個問題,我們要知道Webpack如何處理這些assets,在*.vue
的元件中。你的所有模板和css樣式都被vue-html-loader and css-loader解析以查詢資源urls。
舉例<img src="./logo.png"> and background: url(./logo.png), "./logo.png"是相對資源路徑會被webpack作為模組依賴性解決。
因為logo.png
不是js,當作為模組依賴性對待的時候,我們需要使用url-loader and file-loader去處理。這個模板,已經配置了這些loaders。你可以免費獲得如filename fingerprinting和 base64內聯功能,當你使用相對路徑的時候不用考慮部署問題。
由於這些資產可能在構建過程中被內聯/複製/重新命名,因此它們基本上是原始碼的一部分。這就是為什麼建議將Webpack處理的靜態資源放置在/ src中以及其他原始檔的原因。 實際上,你甚至不必將它們全部放在/ src / assets中:您可以使用它們根據模組/元件組織它們。 例如,您可以將每個元件放在其自己的目錄中,其靜態assets就位於其旁邊。
Asset 解析規則
1 urls 相對路徑:類似./assets/logo.png
會被解釋成模組依賴,會被替換成由webpack基於你輸出配置的自動生成的url路徑
2 沒有字首的urls 類似assets/logo.png
等同於./assets/logo.png
3 帶有~
字首的urls : 會被作為一個模組請求,類似require('some-module/image.png')
,如果你想利用Webpack模組解析配置,你需要使用這個字首
4 根目錄相對路徑。 不會被處理
在js中獲取Asset路徑
為了在webpack中返回正確的路徑,你需要使用require('./relative/path/to/file.jpg')
,這會被file-loader
處理並且返回解析後的路徑 例如:
computed: {
background () {
return require('./bgs/' + this.id + '.jpg')
}
}
註釋: 例子中的圖片在最後的build中都會在./bgs/
。因為webpack無法猜測在執行是什麼時候時候使用到。
真正靜態資源
作為對比,在static/
不會被webapck處理.他們會被直接複製並且相同的檔名。你必須使用他們用絕對路徑。這個絕對路徑是這是通過在config.js中加入build.assetsPublicPath和build.assetsSubDirectory來確定的
// config/index.js
module.exports = {
// ...
build: {
assetsPublicPath: '/',
assetsSubDirectory: 'static'
}
}
所有放在static/
檔案加下面的檔案必須使用絕對路徑static/filename
。如果你改變了assetSubDirectory
為asset
。路徑變為asset/filename
環境變數
有時根據應用程式執行的環境具有不同的配置值是可行的。
類似
// config/prod.env.js
module.exports = {
NODE_ENV: '"production"',
DEBUG_MODE: false,
API_KEY: '"..."' // this is shared between all environments
}
// config/dev.env.js
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
DEBUG_MODE: true // this overrides the DEBUG_MODE value of prod.env
})
// config/test.env.js
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})
註釋: 字串變數需要'"..."'
綜上,環境變數
Production
NODE_ENV = 'production',
DEBUG_MODE = false,
API_KEY = '...'
Development
NODE_ENV = 'development',
DEBUG_MODE = true,
API_KEY = '...'
Testing
NODE_ENV = 'testing',
DEBUG_MODE = true,
API_KEY = '...'
test.env 繼承dev ,dev繼承prod.env
使用
最簡單的使用方法
Vue.config.productionTip = process.env.NODE_ENV === 'production'
於後端框架整合
如果你構建的是純靜態介面(沒有埠api互動的),你就不需要編輯config/index.js
.
然而你像整合這個模板到現有的後端框架中。你需要編輯config/index.js
直接生成前段資源給後端。
預設的config/index.js
// config/index.js
'use strict'
const path = require('path')
module.exports = {
dev: {
/ Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings
host: 'localhost',
port: 8080,
// skipping other options as they are only convenience features
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
productionSourceMap: true,
// skipping the rest ...
},
}
在build的括號中,有這幾個選項。build.index
必須是當地檔案系統中的絕對路徑
這個是index.html自動生成的
你可以相應地編輯index.html並將此路徑指向您的後端應用程式呈現的檢視檔案,
app/views/layouts/application.html.erb for a Rails app, or resources/views/index.blade.php for a Laravel app.
build.assetsRoot
也必須是絕對路徑
必須指向包含靜態資源的根目錄
For example, public/ for both Rails/Laravel.build.assetsSubDirectory
webpack生成器巢狀在build.assetsRoot
資料夾中,其他檔案不應該混合在一起。舉個例子,如果build.assetsRoot
是/path/to/dist
.build.assetsSubDirectory
是static
。那麼webpack 生成的資源就會在path/to/dist/static
資料夾下。
這個目錄會在每次build的時候清除。所以他應該只包含build生成的資原始檔。
在/static
中的檔案都在會構建時,拷貝到該目錄。這意思是如果你改變了這個字首所有在/static
中絕對路徑的URLs都需要改變。
build.assetsPublicPath
這應該是你的build.assetsRoot將通過HTTP提供的URL路徑。 在大多數情況下,這將是根(/)。 只有在後端框架為路徑字首提供靜態資產時才更改此設定。 在內部,這作為output.publicPath傳遞給Webpack。
build.productionSourceMap
是否在生產模式下生成資源對映
dev.port
指定開發埠號
dev.proxyTable
定義開發伺服器的代理規則
在開發模式下的API代理
當需要整合當前模板到現有後臺框架的時候。最常見的需求就是使用開發伺服器請求後臺API。為了這樣,我們可以執行開發伺服器和後臺伺服器,讓開發伺服器代理api請求到真正的後臺伺服器。
為了配置代理規則。編輯config/index.js
中的dev.proxyTable
.這個開發伺服器是使用http-proxy-middleware
來代理。所以你可以檢視文件來了解使用細節。這邊有個簡單的例子。
// config/index.js
module.exports = {
// ...
dev: {
proxyTable: {
// proxy all requests starting with /api to jsonplaceholder
'/api': {
target: 'http://jsonplaceholder.typicode.com',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
}
}
上面的例子會代理請求/api/posts/1
到http://jsonplaceholder.typicode.com/posts/1
上面去。
URL 匹配
除了靜態URL之外,您還可以使用全域性模式來匹配網址,例如/ API/**。除此之外,你可以自定義方法來確定是否請求可以被代理。
proxyTable: {
'**': {
target: 'http://jsonplaceholder.typicode.com',
filter: function (pathname, req) {
return pathname.match('^/api') && req.method === 'GET'
}
}
}
單元測試
專案提供了2種單元測試。
1.Jest
2.Karma and Mocha
Jest
啟動JSDOM的測試執行器執行測試並將結果報告給我們。
Files
setup.js
Jest在執行單元測試之前執行此檔案。 它將Vue生產提示設定為false。
Mocking 依賴
Karma and Mocha
相關文章
- Gremlin-官網介紹翻譯REM
- 把catoiOS介紹翻譯10遍iOS
- 怎麼把Excel文件翻譯成中文?Excel文件翻譯方法介紹Excel
- [翻譯]資料結構——trie樹介紹資料結構
- edge瀏覽器翻譯功能在哪 edge網頁翻譯成中文方法介紹瀏覽器網頁
- 針對 Source Maps 的一篇介紹(翻譯)
- 使用Webpack提升Vue.js應用程式的4種方法(翻譯)WebVue.js
- Python-VidGear模組翻譯系列-01-Introduction介紹Python
- Webpack 的簡單介紹Web
- Prepack 介紹(譯)
- [翻譯]阮一峰webpack教程(Demo集合)Web
- webpack4新特性介紹Web
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- Webpack及npm介紹安裝WebNPM
- Python爬蟲教程-07-post介紹(百度翻譯)(上)Python爬蟲
- Python爬蟲教程-08-post介紹(百度翻譯)(下)Python爬蟲
- [Flutter翻譯]介紹StatsFl,Flutter的FPS監視器 - gskinner部落格Flutter
- [譯] React Profiler 介紹React
- webpack介紹以及快速配置上手Web
- 1. VUE介紹Vue
- 「譯」MotionLayout介紹 (part III)
- 「譯」MotionLayout 介紹 (part II)
- webpack 學習筆記:入門介紹Web筆記
- 前端工程化與webpack的介紹前端Web
- Webpack的基本配置和打包與介紹Web
- 【翻譯】Webpack 4 教程:從0配置到生產模式Web模式
- Vue 關鍵概念介紹Vue
- NEO Python編譯器介紹Python編譯
- [譯] Chrome 71 新特性介紹Chrome
- [譯] 谷歌:Wake Lock API 介紹谷歌API
- 【譯】2分鐘介紹Rx
- Webpack的基本配置和打包與介紹(二)Web
- Vue.js 3.0 PPT(附部分中文翻譯)Vue.js
- 【翻譯】構建響應式系統-vueVue
- [譯] Laravel 5 之美 – 1) 介紹Laravel
- [譯] part 20: golang 併發介紹Golang
- webpack 專案接入Vite的通用方案介紹(上)WebVite
- [Flutter翻譯]使用Flutter WEB實現桌面GUI(第一部分:介紹)FlutterWebGUI