2023-04-14 08:05:41 +08:00
//@ts-check
'use strict' ;
const path = require ( 'path' ) ;
2023-05-04 16:09:19 +08:00
const HtmlWebpackPlugin = require ( 'html-webpack-plugin' ) ;
const { DefinePlugin } = require ( 'webpack' ) ;
const CopyWebpackPlugin = require ( 'copy-webpack-plugin' ) ;
2023-04-14 08:05:41 +08:00
//@ts-check
/** @typedef {import('webpack').Configuration} WebpackConfig **/
/** @type WebpackConfig */
const extensionConfig = {
2023-05-05 23:08:48 +08:00
name : 'vscode extension' ,
2023-04-14 08:05:41 +08:00
target : 'node' , // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/
2023-05-04 16:09:19 +08:00
mode : 'none' , // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
2023-04-14 08:05:41 +08:00
2023-05-05 23:08:48 +08:00
entry : './src/extension.ts' , // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/
2023-04-14 08:05:41 +08:00
output : {
// the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/
path : path . resolve ( _ _dirname , 'dist' ) ,
2023-05-05 23:08:48 +08:00
filename : 'extension.js' ,
2023-04-14 08:05:41 +08:00
libraryTarget : 'commonjs2'
} ,
externals : {
vscode : 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/
// modules added here also need to be added in the .vscodeignore file
} ,
resolve : {
// support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader
2023-05-05 23:08:48 +08:00
extensions : [ '.ts' , '.json' ]
} ,
module : {
rules : [
{
test : /\.ts?$/ ,
exclude : /node_modules/ ,
use : [
{
loader : 'babel-loader' ,
options : {
presets : [
'@babel/preset-env' ,
'@babel/preset-react' ,
'@babel/preset-typescript'
]
}
} ,
{
loader : 'ts-loader'
}
]
} ,
]
} ,
devtool : 'nosources-source-map' ,
infrastructureLogging : {
level : "log" , // enables logging required for problem matchers
} ,
plugins : [ ]
} ;
/** @type WebpackConfig */
const webviewConfig = {
name : 'webview' ,
target : 'web' ,
mode : 'development' ,
entry : './src/views/index.tsx' ,
output : {
path : path . resolve ( _ _dirname , 'dist' ) ,
filename : 'index.js' ,
} ,
resolve : {
2023-05-04 16:09:19 +08:00
extensions : [ '.ts' , '.tsx' , '.js' , '.json' ]
2023-04-14 08:05:41 +08:00
} ,
module : {
rules : [
{
2023-05-04 16:09:19 +08:00
test : /\.tsx?$/ ,
2023-04-14 08:05:41 +08:00
exclude : /node_modules/ ,
use : [
2023-05-04 16:09:19 +08:00
{
loader : 'babel-loader' ,
options : {
presets : [
'@babel/preset-env' ,
'@babel/preset-react' ,
'@babel/preset-typescript'
]
}
} ,
2023-04-14 08:05:41 +08:00
{
loader : 'ts-loader'
}
]
2023-05-04 16:09:19 +08:00
} ,
{
test : /\.jsx?$/ ,
exclude : /node_modules/ ,
2023-05-05 23:08:48 +08:00
use : [ {
loader : 'babel-loader' ,
options : {
presets : [
[
'@babel/preset-env' ,
'@babel/preset-react' ,
] ,
]
} ,
} ]
2023-05-04 16:09:19 +08:00
} ,
{
test : /\.css$/i ,
use : [
{
loader : 'style-loader' ,
} ,
{
loader : 'css-loader' ,
options : {
modules : {
localIdentName : '[name]__[local]___[hash:base64:5]'
}
}
}
] ,
include : /views/
} ,
{
test : /\.json$/i ,
use : 'json-loader' ,
type : 'asset/source'
} ,
{
test : /\.(png|jpe?g|gif|svg)$/i ,
use : [
{
loader : 'url-loader' ,
options : {
limit : 8192 ,
} ,
} ,
] ,
2023-04-14 08:05:41 +08:00
}
]
} ,
2023-05-05 23:08:48 +08:00
devtool : 'source-map' ,
2023-04-14 08:05:41 +08:00
infrastructureLogging : {
2023-05-05 23:08:48 +08:00
level : "log" ,
2023-04-14 08:05:41 +08:00
} ,
2023-05-04 16:09:19 +08:00
plugins : [
// generate an HTML file that includes the extension's JavaScript file
new HtmlWebpackPlugin ( {
template : path . resolve ( _ _dirname , 'src' , 'views' , 'index.html' ) ,
filename : 'index.html' ,
chunks : [ 'index' ]
} ) ,
new CopyWebpackPlugin ( {
patterns : [
{ from : 'assets' , to : 'assets' } ,
] ,
} )
]
2023-04-14 08:05:41 +08:00
} ;
2023-05-04 16:09:19 +08:00
2023-05-05 23:08:48 +08:00
module . exports = [ extensionConfig , webviewConfig ] ;