I already had a library that I wanted to convert to Typescript. I picked Rollup.js to do my build process.
First I installed the following packages:
> npm i -E -D rollup typescript @rollup/plugin-commonjs\
@rollup/plugin-node-resolve rollup-plugin-typescript2\
rollup-plugin-peer-deps-external
I ended up with:
* [email protected]
* [email protected]
* [email protected]
* [email protected]
* @rollup/[email protected]
* @rollup/[email protected]
Then I created a tsconfig.json
:
{
"compilerOptions": {
"outDir": "build",
"module": "esnext",
"target": "es5",
"lib": ["es6", "dom", "es2016", "es2017"],
"sourceMap": true,
"allowJs": false,
"declaration": true,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
},
"include": ["src"],
"exclude": ["node_modules", "build"]
}
Also a rollup.config.js
:
import typescript from "rollup-plugin-typescript2";
import external from "rollup-plugin-peer-deps-external";
import commonjs from "@rollup/plugin-commonjs";
import resolve from "@rollup/plugin-node-resolve";
import pkg from "./package.json";
export default {
input: "src/index.ts",
output: [
{
file: pkg.main,
format: "cjs",
exports: "named",
sourcemap: true,
},
{
file: pkg.module,
format: "es",
exports: "named",
sourcemap: true,
},
],
plugins: [
external(),
resolve(),
typescript({
rollupCommonJSResolveHack: true,
exclude: "**/__tests__/**",
clean: true,
}),
commonjs({
include: ["node_modules/**"],
}),
],
};
Modified my package.json
:
"main": "build/index.js",
"module": "build/index.es.js",
"jsnext:main": "build/index.es.js",
"files": ["build"],
"scripts": {
"build": "rollup -c",
...
}
Finally I created a dummy index.ts
for testing:
function index() {
console.log("hello world");
}
And ran:
> npm run build
ESLINT
I had to update eslint packages:
npm i -E -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
Ended up with:
* @typescript-eslint/[email protected]
* @typescript-eslint/[email protected]
And then modified my .eslintrc.js
:
...
parser: '@typescript-eslint/parser',
extends: [
'standard',
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
],
plugins: ['@typescript-eslint'],
...
You can see the resulting branch here:
https://github.com/hyeomans/zuora-js/tree/ts-rollup
Thanks for reading!