<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
隨著業務複雜度和技術深度的增加,有時我們不得不提高抽離外掛的效率。儘管有很多的技術方案,但總是夾雜了很多依賴和類庫,總感覺沒那麼純淨。因此,在某個如廁的瞬間,萌發了一種可以酣暢淋漓寫外掛的姿勢。
腳手架,就能應當根據個人愛好和編碼習慣來靈活設定。 下面我們就來一層一層的剖析。算了,一層一層太慢你們也沒耐心,直接剖。
Rollup是一款整合式的程式碼打包、應用構建工具。扒拉扒拉檔案
如上面囉嗦的,前端工程化是作為工程師的必要能力,工程化並非一個人就能搞定的,我們需要站在前人/巨人(Copy)的肩膀看世界。
隨著技術的發展,湧現了一些最佳實踐的構建工具,這些構建工具將一些專案管理和程式設計開發的行業最佳實踐整合到了一個“腳手架”工具中。如此,便有利於其他團隊快速構建出高效、高質量的工程化專案。
構建工具能做的事:
yarn add rollup -g
個人推薦使用pnpm
// 安裝pnpm npm install -g pnpm // 安裝rollup pnpm add rollup -g
使用rollup打包構建有兩種方式,直接在命令列下需要手打構建必須的引數,當然我們是做工程,那麼就得考慮如何儘可能減少團隊成員的上手成本。
|-- src //開發資料夾 | |-- index.ts //入口檔案 |-- rollup.config.js //rollup組態檔 |-- index.ts //對外暴露統一入口(非必須)
根目錄下建立一個純淨且功能強大的rollup.config.js
組態檔,可以優先了解下各類外掛的機制,後面會提供一個package.json
,直接安裝就齊活了。
import path from 'path'; import ts from 'rollup-plugin-typescript2'; // 將json 檔案轉換為ES6 模組 import json from '@rollup/plugin-json'; // 在node_模組中查詢並繫結第三方依賴項 import resolve from '@rollup/plugin-node-resolve'; // 將CommonJS模組轉換為ES6 import commonjs from '@rollup/plugin-commonjs'; // rollup babel外掛 import babel from 'rollup-plugin-babel'; // 優化程式碼壓縮 import { terser } from 'rollup-plugin-terser'; // 載入樣式檔案 import styles from 'rollup-plugin-styles'; // 程式碼檢查 import { eslint } from "rollup-plugin-eslint"; import dts from 'rollup-plugin-dts'; // 熱更新服務 import livereload from 'rollup-plugin-livereload'; // 開發伺服器 import serve from 'rollup-plugin-serve'; // 清除目錄工具 import clear from "rollup-plugin-clear"; import pkg from './package.json'; // 判斷是開發環境or生產環境 const NODE_ENV = process.env.NODE_ENV; const isPro = function () { return NODE_ENV === 'production'; }; // 編譯支援的檔案型別 const extensions = ['.js', '.jsx', '.ts', '.tsx', '.less']; export default [ { input: path.resolve('./index.ts'), output: [ { file: pkg.unpkg, format: 'umd', name: '外掛方法名', sourcemap: true, }, { file: pkg.module, format: 'esm', sourcemap: true, }, { file: pkg.main, format: 'cjs', sourcemap: true, }, ], plugins: [ resolve(), commonjs(), json(), styles(), eslint(), // 這裡沒傳入設定引數,會自動載入檔案根目錄的 `.eslintrc.json` 組態檔。 ts({ tsconfig: path.resolve(__dirname, './tsconfig.json'), extensions: extensions, }), babel({ runtimeHelpers: true, exclude: 'node_modules/**', }), !isPro() && livereload({ watch: ['dist', 'examples', 'src/**'], verbose: false, }), isPro() && terser(), !isPro() && serve({ headers: { "Access-Control-Allow-Origin": "*", // 本地服務允許跨域 }, open: false, port: 9529, contentBase: './', // 本地服務的執行檔案根目錄 openPage: '/examples/index.html', }), ], }, { // 生成 .d.ts 型別宣告檔案 input: path.resolve('./index.ts'), output: { file: pkg.types, format: 'es', }, plugins: [ dts(), clear({ targets: ["dist/src"], // 專案打包編譯生成的目錄 watch: true, // 實時監聽檔案變化 }) ], }, ];
提供自查設定列表:https://www.rollupjs.com/guide/big-list-of-options
廢話介紹ESLint 是在 ES/JS程式碼中識別和報告模式匹配的工具,它的目標是保證程式碼的一致性和避免錯誤
通過ESlint
可以儘可能地規範團隊開發的程式碼風格以及通過靜態檢查提升程式碼質量。扒拉扒拉檔案 安裝eslint
pnpm add eslint -D
初始化,引數可按照心情選擇
pnpm run eslint --init
初始化完成後,在根目錄建立了一個ESlint的組態檔:.eslintrc.json
{ "env": { "browser": true, "es2021": true }, "extends": [ "standard" ], "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "rules": { } }
新建.eslintignore
檔案來忽略不需要Eslint檢查的內容
/dist/ /public/ /rollup.config.js
設定rollup支援ESlint,ps:上面已經支援了
import { eslint } from "rollup-plugin-eslint"; ··· eslint(); ···
根目錄建立tsconfig.json
檔案,設定編譯引數
{ "compilerOptions": { "target": "es6", // 編譯後的es版本 "module": "esnext", // 前端模組化規範 "allowJs": true, // 允許引入js檔案 "strict": true, // 開啟嚴格模式 "importHelpers": true, "moduleResolution": "node", "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "suppressImplicitAnyIndexErrors": true, "resolveJsonModule": true, "sourceMap": true, "declaration": true, "lib": ["esnext", "DOM"] }, "exclude": ["node_modules/**"] }
這個就很簡單了,直接提供檔案自己扒拉扒拉,就兩句話一定要去看。
// .babelrc { "presets": ["@babel/preset-env", "@babel/preset-typescript"] }
為了能夠快速測試外掛的呼叫,又避免引入Vue、React等框架。使用最新瀏覽器支援的ESM方式載入打包後的外掛,並啟動服務快速偵錯,下面我們搞一搞。 根目錄下建立examples
資料夾,並新建index.html
檔案
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Demo</title> <script src="../dist/index.umd.js"></script> </head> <body> <h1 align="center" id="app">Hello 我是掃地盲僧!</h1> <p align="center" id="content"></p> </body> <script> const demo = new tsClass('Hello rollup', null, '這是一個基於rollup打包TypeScript的純淨框架') const h1 = document.querySelector('#app') const p = document.querySelector('#content') h1.innerHTML = demo.name p.innerHTML = demo.content </script>
// 執行起來試一試 pnpm run dev
ok搞定,很複雜嗎?不復雜!!
可以根據自己需求隨機刪減,學會靈活使用
{ "name": "rollup-ts-tpl", "version": "1.1.1", "description": "一個純淨版的ts外掛打包cli", "main": "dist/index.cjs.js", "module": "dist/index.esm.js", "unpkg": "dist/index.umd.js", "jsdelivr": "dist/index.umd.js", "types": "dist/index.d.ts", "scripts": { "dev": "cross-env ENV=dev rollup -c -w", "build": "cross-env ENV=production rimraf dist && rollup -c" }, "author": "掃地盲僧", "license": "MIT", "devDependencies": { "@babel/core": "^7.12.3", "@babel/plugin-transform-runtime": "^7.16.4", "@babel/preset-env": "^7.12.1", "@babel/runtime": "^7.16.3", "@rollup/plugin-commonjs": "^16.0.0", "@rollup/plugin-eslint": "^8.0.1", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^10.0.0", "@rollup/plugin-typescript": "^6.1.0", "@typescript-eslint/parser": "^4.14.0", "@types/node": "^17.0.31", "cross-env": "^7.0.3", "babel-plugin-external-helpers": "^6.22.0", "babel-preset-latest": "^6.24.1", "eslint": "^7.18.0", "less": "^4.1.2", "rollup": "^2.33.1", "rollup-plugin-babel": "^4.4.0", "rollup-plugin-clear": "^2.0.0", "rollup-plugin-dts": "^3.0.2", "rollup-plugin-livereload": "^2.0.0", "rollup-plugin-serve": "^1.1.0", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.30.0", "tslib": "^2.3.1", "typescript": "^4.0.5" } }
Rollup
打包工具的基本使用就差不多了,通過嘗試可以發現,Rollup的設定等是非常簡單的,改變了開發者的工作形式,以及提升了工作(編碼)效率
這裡我就不貼倉庫了,無腦copy倒不如自己按照檔案寫一遍,又能加深記憶也可快速掌握原理。3分鐘讓你使用大佬們慣用的姿勢。
“自然者,物見其然,不知所以然;同焉皆得,不知所以得”。 作為前端工程師,我們不僅是要會用,還要明白構建的整個過程,這有助於我們在編碼、架構設計上能夠更加合理,或者說更“自然”。
以上就是3分鐘精通高階前端隨手寫TS外掛的詳細內容,更多關於前端手寫TS外掛的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45