a rollup typescript demo
npm init -y
// 下載套件
npm i -D rollup-plugin-typescript2 typescript rollup nodemon ts-node @types/node
// 加入命令
"scripts": {
"start": "ts-node ./src/index.ts",
"dev": "nodemon ./src/index.ts",
"build": "rollup -c rollup.config.js"
},
tsc --init
此處務必使用預設設定,不然 ts-node 無法順利運作。
{
"module": "commonjs"
}
完整配置可以參考如下
{
"compilerOptions": {
"target": "es2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", // ts-node:commonjs: rollup: es2015 可以覆寫
"lib": [
"es2019",
"DOM"
],
"rootDir": "./src",
"strict": true, /* Enable all strict type-checking options. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
"experimentalDecorators": true
}
}
import typescript from 'rollup-plugin-typescript2';
export default {
input: './src/index.ts',
output: {
dir: 'dist'
},
plugins: [
typescript({
tsconfigOverride: {
compilerOptions: {
module: 'es2015',
},
},
}),
],
};
{
"watch": ["src/**/*.ts"],
"ignore": ["src/**/*.spec.ts"]
}
// math.ts
export function sum(a:number, b:number):number{
return a + b;
}
// index.ts
import { sum } from './math'
console.log(sum(100,200))
npm run start // 測試 ts-node 是否可以直接執行 .ts檔
npm run dev // 開發模式,啟動nodemon去監聽整個 src 底下的檔案
// 目前發現 rollup 也有watch功能 🤔
npm run build // 透過rollup 去生成 bundler.js
terser 能讓我們產出的JS代碼進行壓縮與醜化(本身功能取代uglify)
npm i -D rollup-plugin-terser
因此可以分別產出一隻正常大小壓縮過體積的JS
// rollup.config.js
output: [
{ file: './dist/app.js' },
{ file: './dist/app.min.js', plugins: [terser()] },
],