any-touch 一個手勢庫javascript
用 TypeScript 開發手勢庫 - (1)web開發經常使用手勢有哪些?vue
用TypeScript開發手勢庫 - (3)統一化Mouse和Touch事件java
不到30行, 用any-touch實現一個drawernode
今天的標題有點長, 但不難, 講的都是工具配置和使用, 就3個知識點:react
注: 爲了閱讀體驗, 我把爲何不用webpack放在的本文的最後. 我對代碼作了註釋(若有不懂請留言):webpack
// 爲了讓rollup識別commonjs類型的包,默認只支持導入ES6 import commonjs from 'rollup-plugin-commonjs'; // 爲了支持import xx from 'xxx' import nodeResolve from 'rollup-plugin-node-resolve'; // ts轉js的編譯器 import typescript from 'rollup-plugin-typescript'; // 支持加載json文件 import json from 'rollup-plugin-json'; // 支持字符串替換, 好比動態讀取package.json的version到代碼 import replace from 'rollup-plugin-replace'; // 讀取package.json import pkg from './package.json'; // 代碼生成sourcemaps import sourceMaps from 'rollup-plugin-sourcemaps' // 代碼頭 const banner = `/*! * AnyTouch.js v${pkg.version} * (c) 2018-${new Date().getFullYear()} Russell * https://github.com/383514580/any-touch * Released under the MIT License. */` export default { input: './src/main.ts', plugins: [ // 代碼中的__VERSION__字符串會被package.json中的version字段所替代 replace({ __VERSION__: pkg.version }), typescript({ exclude: 'node_modules/**', typescript: require('typescript'), }), json(), nodeResolve({ jsnext: true, main: true }), commonjs({ include: 'node_modules/**' }), sourceMaps() ], output: [{ format: 'cjs', // 生成的文件名和路徑 // package.json的main字段, 也就是模塊的入口文件 file: pkg.main, banner, sourcemap: true }, { format: 'es', // rollup和webpack識別的入口文件, 若是沒有該字段, 那麼會去讀取main字段 file: pkg.module, banner, sourcemap: true }, { format: 'umd', name: 'AnyTouch', file: pkg.browser, banner, sourcemap: true } ] };
源碼git
{ "compilerOptions": { // 容許未執行的代碼不報錯 "allowUnreachableCode": true, // 嚴格模式, 強烈建議開啓 "strict": true, // 支持別名導入: // import * as React from "react" "esModuleInterop": true, // 目標js的版本 "target": "es5", // 目標代碼的模塊結構版本 "module": "es6", // 在表達式和聲明上有隱含的 any類型時報錯。 "noImplicitAny": true, // 刪除註釋 "removeComments": true, // 保留 const和 enum聲明 "preserveConstEnums": false, // 生成sourceMap "sourceMap": true, // 目標文件所在路徑 "outDir": "./lib", // 編譯過程當中須要引入的庫文件的列表 "lib": [ "dom", "es7" ], // 額外支持解構/forof等功能 "downlevelIteration": true, // 是否生成聲明文件 "declaration": true, // 聲明文件路徑 "declarationDir": "./lib", // 此處設置爲node,才能解析import xx from 'xx' "moduleResolution": "node" }, // 入口文件 "include": [ "src/main.ts" ] }
源碼es6
好了文件配置好了, 咱們能夠把咱們的ts代碼轉成js, 就差在package.json中加一條命令了:github
// package.json { ... "script": { "build": "tsc && rollup -c" } ... }
這裏tsc
是爲了在lib目錄生產聲明文件, rollup -c
會生成umd/es/commonjs三種模塊的代碼, "c"是config縮寫, 表明讀取rollup.config.jsweb
其實npx並非本文主角,可是若是你的tsc不是全局安裝的, 那麼你在命令行運行tsc會提示找不到他, 可是若是你用npx tsc
那麼他就會運行你本地的node_modules中的tsc命令, 驚不驚喜.
若是你瞭解webpack和rollup的不一樣下面內容能夠跳過.
一說到打包工具你們想到的確定是webpack, 他有各類loader, 固然也有ts-loader, 可是他生成代碼有不少是非咱們所寫的邏輯代碼, 好比一些他自有的模塊加載功能:
是的, rollup生成代碼只是把咱們的代碼轉碼成目標js並沒有其餘, 同使若是須要,他能夠同時幫咱們生成支持umd/commonjs/es的js代碼, vue / react /angular都在用他做爲打包工具.
vue
react
angular
2期了都尚未講到代碼, 估計你們都着急, 莫着急,下一期開始我們就講代碼了, 平時上班工做實在是忙, 都是晚上更新文章, 這個週末我會多寫點, 若是實在火燒眉毛也能夠先看看我寫好的代碼預熱下: