tags | |
---|---|
|
-
Uninstall jest (this is due to some weird version resolution between jest and babel when jest is installed in advanced)
npm uninstall jest @types/jest
-
Install all dev dependencies
npm i -D jest @types/jest @babel/core @babel/preset-env @babel/preset-typescript @types/aws-lambda @typescript-eslint/eslint-plugin @typescript-eslint/parser [email protected] babel-eslint babel-jest babel-loader eslint eslint-config-prettier typescript
-
If you need React, install additional dependencies
npm i react react-dom npm i -D @types/react @types/react-dom @babel/preset-react
-
Add
.babelrc
{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "12" } } ], "@babel/preset-typescript" ] }
If you need React, add
@babel/preset-react
before@babel/preset-typescript
. -
Add
.eslintrc.json
{ "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "prettier/@typescript-eslint" ], "parser": "@typescript-eslint/parser", "env": { "node": true, "es6": true, "jest": true }, "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/interface-name-prefix": [2, "always"], "@typescript-eslint/explicit-function-return-type": 0, "@typescript-eslint/no-explicit-any": 0 } }
-
Add
tsconfig.json
-
Add babel-loader to
webpack.config.js
const path = require('path'); const fs = require('fs'); let nodeModules = {}; const buildDir = path.join(__dirname, 'build'); fs.readdirSync('node_modules') .filter(x => ['.bin'].indexOf(x) === -1) .forEach(mod => (nodeModules[mod] = 'commonjs ' + mod)); /** * @type {import('webpack').Configuration} */ module.exports = { entry: './src/index.ts', target: 'node', output: { path: buildDir, libraryTarget: 'commonjs', filename: `index.js` }, module: { rules: [ { test: /\.(ts|tsx)$/, exclude: /node_modules/, use: ['babel-loader'] } ] }, resolve: { extensions: ['*', '.js', '.jsx', '.ts', '.tsx', '.json'] }, externals: ['aws-sdk'], devtool: 'source-map', plugins: [] };
-
Add
lint
andtypecheck
scripts topackage.json
:{ "scripts": { "lint": "eslint --ext .js,.ts,.tsx src --ignore-pattern \"**/*.spec.js\" --ignore-pattern \"**/*.spec.ts\"", "typecheck": "tsc --noEmit" } }