摘要:前端構建之之前寫了一個前端構建之,同樣的目的寫一個,內容基本上和一樣,主要用來自己學習記錄。合并很方便的實現合并最后附上完整的源代碼。
前端構建之webpack
之前寫了一個前端構建之gulp,同樣的目的寫一個webpack, 內容基本上和gulp一樣,主要用來自己學習記錄。
不解釋
規范校驗js代碼(jslint)
js解釋器(babel)
合并js代碼(concat)
壓縮js代碼(uglify)
sourcemap
規范校驗css代碼(csslint)
css解釋器
合并css代碼
壓縮css代碼
規范校驗js代碼js檢測工具用來
檢測自己寫的js是否有語法錯誤
是否根據我們設定的規則寫的
常用的js檢測工具有jshint、jslint、eslint等, 推薦用eslint。
在webpack中,推薦用eslint這個插件。使用eslint時配置一個.eslintrc文件,用來編寫自定義js規則。
如果用到了es模塊,需要在.eslintrc配置中指定parserOptions的sourceType為module。
{ "root": true, "env": { "browser": true, "node": true, "es6": true }, "parserOptions": { "sourceType": "module" }, "extends": "eslint:recommended", //使用推薦的eslint語法 "rules": { "indent": ["error", 4], //自定義indent為4個空格,級別為error "semi": ["off", "always"], "no-console": "off", "no-unused-vars": "off" } }
使用prettier, 根據prettier自定義來強制修改js代碼。
可以在使用prettier時添加options,或者建立一個config文件來配置options也可以。
參考這里
{ singleQuote: true, trailingComma: "all", bracketSpacing : true, semi: true, tabWidth: 4, //定義indent為4個空格 printWidth: 120 }
這個插件目的是在commit之前,執行相關操作
"precommit": "gulp format_js"
這個插件目的是建立和git之間的hooks(鉤子), 通常和precommit結合用,
比如使用git commit這個命令時, 會通過hooks調用precommit語句。
這樣我們就不需要專門去執行npm run precommit這個命令了,
當我們git commit的時候,husky會自動調用npm run precommit。
但是還有一個問題, 上面執行完git commit 后,通過prettier修改了所有的js文件,
有些便不是我自己修改的文件,也會被強制修改,
于是可以通過lint-staged這個node模塊來指定stage中的文件。
思想很簡單,只對git stage中的文件處理。
可以參考這里
通常使用它的思想:
執行git commit時,通過husky調用precommit
precommit 執行lint-staged,即只對git stage中的文件進行處理
在lint-staged中配置prettier修改js文件(添加一個config文件來配置)
在lint-staged中配置eslintjs檢測文件(添加一個eslintrc文件來配置)
如果正常通過, 則把通過prettier修改和eslint檢測的js文件,通過git add 添加
"scripts": { "precommit": "lint-staged" }, "lint-staged": { "*.js": [ // 要處理的js路徑 "prettier --write", //要處理的文件上修改 "eslint --fix", // 參數fix的意思是:根據eslint配置文件自動修復js文件 "git add" ] },
prettier 能強制修改js,eslint --fix也能強制修改js, 區別是什么呢???
我的理解prettier更強一點,eslint --fix 強制修改有限。
這里有一個注意點,prettier的配置參數, 通過添加一個config文件來配置。
可以在使用prettier時添加options,或者建立一個config文件來配置options也可以。
"lint-staged"的配置的意思是,
坑對git stage中的文件的操作,如eslint *.js, git add *.js, 不能用寫gulp *.js
參考這里
我添加的是 prettier.config.js文件,
module.exports = { printWidth: 120, parser: "flow", singleQuote: true, tabWidth: 4, bracketSpacing : true, semi: true };
eslintrc前面已經寫過了。 通過lint-staged就不需要第7步中生成一個臨時文件(tempjs)來過渡了, 因為prettier就直接處理stage終端文件了。
思想:
通過lint-staged獲取想要處理的js文件
通過prettier 根據自定義規則強制修改要處理的js文件
eslint檢測通過prettier強制修改的js文件
eslint檢測通過的話, 將處理的js文件添加到git stage中
使用es6寫js時,轉化為各個瀏覽器能識別的es5babel用來將es6語法轉化為es5, 比如es6中的let轉化為var, 變量字符串拼接轉化為+,等等。 結合webpack用,就需要使用webpack強大的loader, 它依賴于babel-core,所以需要安裝babel-loader和babel-core。 自己的理解: babel, babel-core提供了babel的運行環境(理解有錯誤的話,之后改正)。 只有這兩個(babel, babel-core)還不能實現轉譯,需要transform插件(如babel-preset-env) 然后需要安裝babel-preset-env來將自己寫的es6(源碼),根據當前執行環境(瀏覽器), 轉化為es5(當前環境-瀏覽器能識別的語法)合并js
為什么需要合并js呢,通過合并js文件,可以減少http請求。
通過webpack可以將多個js文件合并成一個js文件。 一個入口文件,一個輸出。 用法相對簡單,
現在有一個新的需求task1, 需要多帶帶寫幾個js文件,
但是不想和其他js合并到一起,也就是說想多帶帶合并這幾個js文件,然后多帶帶輸出,
這個時候, 就多入口文件,多個輸出。
比起gulp來,webpack可以很方便的實現這個功能。
壓縮jswebpack中可以使用 uglifyjs-webpack-plugin用來壓縮js文件
壓縮很簡單, 獲取js原文件,合并,然后壓縮
sourcemap 的目的:還原源碼, 什么意思呢? 當我們將源碼經過合并,壓縮處理后,成為了一個文件,不方便調試。 特別是壓縮后更是面目全非,這樣我們在開發階段不能實現debug,比如打斷點功能就不可能實現了。 sorucemap就是解決的這個問題。 經過sourcemap處理后,在目標目錄(dest指定的)下,生成一個新文件(與轉譯前對應的map文件), 目錄結構與轉譯前完全對應。這樣我們就很容易找到某個文件,然后實現打斷點。 webpack自帶sourcemap功能,只需要添加devtool既可以。規范校驗css代碼
規范校驗js寫法的工具有jslint,jshint,最近的eslint等等, 規范校驗css寫法的工具有csslint,stylelint等等。
stylelint用來檢測css是否根據配置文件來寫的,是基于postcss的一個檢測工具。
stylefmt是一個根據stylelint的配置文件來強制修改css文件的插件。有點prettier的意思。
但是可以不用stylefmt, 在stylelint的選項中添加 --fix 也可以修改css文件。
npm install postcss stylelint-loader stylelint stylelint-config-standard -save-dev
使用stylelint時,有個標準配置插件, stylelint-config-standard。
以下為 stylelint的配置文件(.stylelintrc)
{ "extends": "stylelint-config-standard", // 使用stylelint的默認標準配置 "rules": { "declaration-block-trailing-semicolon": null, // 各種規則,根據自己需要可以靈活配置 "indentation": 4, "block-no-empty": null, "max-empty-lines": 1, "selector-list-comma-newline-after": never-multi-line, "at-rule-no-unknown": null, "declaration-colon-space-after": null, "no-duplicate-selectors" : null, "no-descending-specificity": null, "selector-pseudo-element-colon-notation": null, "no-empty-source": null } }
當我們用sass的寫法來書寫css
想在css中用變量,for循環等語法
想利用 (cssnext)[http://cssnext.io/] 書寫css時
根據不同瀏覽器自動添加前綴 (autoprefixer)
當我們想在css中實現上述等功能時,可以用postcss。
postcss就是一個平臺,可以通過添加各種插件來實現上述等功能。
npm install postcss-cssnext postcss-simple-vars postcss-nested --save-dev
可以寫一個postcss的配置文件來專門規范postcss相關的配置,也可以直接寫在在webpack配置文件中。css合并
webpack很方便的實現css合并
最后附上完整的(github源代碼)[https://github.com/zhangchch/...]。
以上都是自己的理解,如有錯誤的地方,真心求指教。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108004.html
摘要:發布是由團隊開源的,操作接口庫,已成為事實上的瀏覽器操作標準。本周正式發布,為我們帶來了,,支持自定義頭部與腳部,支持增強,兼容原生協議等特性變化。新特性介紹日前發布了大版本更新,引入了一系列的新特性與提升,本文即是對這些變化進行深入解讀。 showImg(https://segmentfault.com/img/remote/1460000012940044); 前端每周清單專注前端...
摘要:作為目前最熱門最具前景的前端框架之一,其提供了一種幫助我們快速構建并開發前端項目的新的思維模式。的新版本,的簡稱。的包管理工具,用于同一管理我們前端項目中需要用到的包插件工具命令等,便于開發和維護。 Vue.js作為目前最熱門最具前景的前端框架之一,其提供了一種幫助我們快速構建并開發前端項目的新的思維模式。本文旨在幫助大家認識Vue.js,了解Vue.js的開發流程,并進一步理解如何通...
摘要:前端每周清單第期支付寶前端構建工具發展用加快網頁響應速度餓了么升級實踐前端前端每周清單前端每周清單專注前端領域內容,分為新聞熱點開發教程工程實踐深度閱讀開源項目巔峰人生等欄目。 前端每周清單第 12 期:支付寶前端構建工具發展、LinkedIn用Brotli加快網頁響應速度、餓了么PWA 升級實踐 為InfoQ中文站特供稿件,首發地址為這里;如需轉載,請與InfoQ中文站聯系。從屬于筆...
摘要:前言與是目前圈子內比較活躍的前端構建工具。對于初學者來說,對這二者往往容易認識不清,今天,就從事件的源頭,說清楚與。它可以將許多松散的模塊按照依賴和規則打包成符合生產環境部署的前端資源。打包后形成的文件出口。 前言:Webpack 與 gulp是目前圈子內比較活躍的前端構建工具。網上有很多二者比較的文章,面試中也會經常遇到gulp,Webpack的區別這樣的問題。對于初學者來說,對這二...
閱讀 773·2019-08-29 16:32
閱讀 841·2019-08-29 12:31
閱讀 3220·2019-08-26 18:26
閱讀 3160·2019-08-26 12:20
閱讀 1738·2019-08-26 12:00
閱讀 3011·2019-08-26 10:58
閱讀 2818·2019-08-23 17:08
閱讀 2315·2019-08-23 16:32