From 95d7ff847e9999669b47d4709628a2b6c0f155a2 Mon Sep 17 00:00:00 2001 From: chh <1474479+chenhunghan@users.noreply.github.com> Date: Thu, 26 Nov 2020 16:12:53 +0800 Subject: [PATCH] Use webpack instead of tsc to output extension-api.ts (#1499) * Use webpack instead of tsc to output extension-api.ts * Move tsconfig.extension.json into ts-loader's compilerOptions Signed-off-by: Hung-Han (Henry) Chen <1474479+chenhunghan@users.noreply.github.com> --- package.json | 2 +- tsconfig.extensions.json | 11 ----- webpack.extensions.ts | 87 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 12 deletions(-) delete mode 100644 tsconfig.extensions.json create mode 100644 webpack.extensions.ts diff --git a/package.json b/package.json index 0cd1b905ef..869f7453c3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "compile:main": "yarn run webpack --config webpack.main.ts", "compile:renderer": "yarn run webpack --config webpack.renderer.ts", "compile:i18n": "yarn run lingui compile", - "compile:extension-types": "yarn run tsc -p ./tsconfig.extensions.json --outDir src/extensions/npm/extensions/dist", + "compile:extension-types": "yarn run webpack --config webpack.extensions.ts", "npm:fix-package-version": "yarn run ts-node build/set_npm_version.ts", "build:linux": "yarn run compile && electron-builder --linux --dir -c.productName=Lens", "build:mac": "yarn run compile && electron-builder --mac --dir -c.productName=Lens", diff --git a/tsconfig.extensions.json b/tsconfig.extensions.json deleted file mode 100644 index 21579bae38..0000000000 --- a/tsconfig.extensions.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "files": [ - "src/extensions/extension-api.ts", - ], - "compilerOptions": { - "module": "CommonJS", - "sourceMap": false, - "declaration": true - } -} diff --git a/webpack.extensions.ts b/webpack.extensions.ts new file mode 100644 index 0000000000..f3adcc858e --- /dev/null +++ b/webpack.extensions.ts @@ -0,0 +1,87 @@ + +import path from 'path'; +import webpack from "webpack"; +import { sassCommonVars } from "./src/common/vars"; + +export default function (): webpack.Configuration { + const entry = "./src/extensions/extension-api.ts" + const outDir = "./src/extensions/npm/extensions/dist"; + return { + // Compile for Electron for renderer process + // see + target: "electron-renderer", + entry, + output: { + filename: 'extension-api.js', + // need to be an absolute path + path: path.resolve(__dirname, `${outDir}/src/extensions`), + // can be use in commonjs environments + // e.g. require('@k8slens/extensions') + libraryTarget: "commonjs" + }, + module: { + rules: [ + { + test: /\.tsx?$/, + loader: 'ts-loader', + options: { + // !! ts-loader will use tsconfig.json at folder root + // !! changes in tsconfig.json may have side effects + // !! on '@k8slens/extensions' module + compilerOptions: { + declaration: true, // output .d.ts + sourceMap: false, // to override sourceMap: true in tsconfig.json + outDir // where the .d.ts should be located + } + } + }, + // for src/renderer/components/fonts/roboto-mono-nerd.ttf + // in src/renderer/components/dock/terminal.ts 95:25-65 + { + test: /\.(ttf|eot|woff2?)$/, + use: { + loader: "url-loader", + options: { + name: "fonts/[name].[ext]" + } + } + }, + // for import scss files + { + test: /\.s?css$/, + use: [ + // creates `style` nodes from JS strings + "style-loader", + // translates CSS into CommonJS + "css-loader", + { + loader: "sass-loader", + options: { + prependData: `@import "${path.basename(sassCommonVars)}";`, + sassOptions: { + includePaths: [ + path.dirname(sassCommonVars) + ] + }, + } + }, + ] + } + ] + }, + resolve: { + extensions: ['.ts', '.tsx', '.js'] + }, + plugins: [ + // In ts-loader's README they said to output a built .d.ts file, + // you can set "declaration": true in tsconfig.extensions.json, + // and use the DeclarationBundlerPlugin in your webpack config... but + // !! the DeclarationBundlerPlugin doesn't work anymore, author archived it. + // https://www.npmjs.com/package/declaration-bundler-webpack-plugin + // new DeclarationBundlerPlugin({ + // moduleName: '@k8slens/extensions', + // out: 'extension-api.d.ts', + // }) + ] + }; +}