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 = {
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-04 16:09:19 +08:00
entry : {
extension : './src/extension.ts' , // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/
index : './src/views/index.tsx'
} ,
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-04 16:09:19 +08:00
filename : '[name].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-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?$/ ,
use : 'babel-loader' ,
exclude : /node_modules/ ,
} ,
{
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
}
]
} ,
devtool : 'nosources-source-map' ,
infrastructureLogging : {
level : "log" , // enables logging required for problem matchers
} ,
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' } ,
] ,
} ) ,
// define global variables
new DefinePlugin ( {
'process.env.NODE_ENV' : JSON . stringify ( 'development' )
} )
]
2023-04-14 08:05:41 +08:00
} ;
2023-05-04 16:09:19 +08:00
module . exports = [ extensionConfig ] ;