1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-11-30 13:03:53 +01:00
bitwarden-browser/webpack.config.js

168 lines
5.5 KiB
JavaScript
Raw Normal View History

const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin;
2018-04-04 04:14:54 +02:00
const isVendorModule = (module) => {
2018-04-04 04:14:54 +02:00
if (!module.context) {
return false;
}
2018-04-07 06:24:37 +02:00
return module.context.indexOf('node_modules') !== -1;
2018-04-04 04:14:54 +02:00
};
const extractCss = new ExtractTextPlugin({
filename: '[name].css',
disable: false,
2018-04-07 06:24:37 +02:00
allChunks: true,
2018-04-04 04:14:54 +02:00
});
2018-04-07 06:24:37 +02:00
const config = {
2018-04-04 04:14:54 +02:00
entry: {
2018-04-11 03:54:20 +02:00
'popup/main': './src/popup/main.ts',
2018-04-04 04:14:54 +02:00
'background': './src/background.ts',
'content/autofill': './src/content/autofill.js',
'content/autofiller': './src/content/autofiller.js',
'content/notificationBar': './src/content/notificationBar.js',
'content/shortcuts': './src/content/shortcuts.js',
2018-04-11 04:05:23 +02:00
'notification/bar': './src/notification/bar.js',
2018-04-04 04:14:54 +02:00
'downloader/downloader': './src/downloader/downloader.ts',
'2fa/2fa': './src/2fa/2fa.ts',
},
2018-04-06 23:02:46 +02:00
resolve: {
extensions: ['.tsx', '.ts', '.js'],
alias: {
jslib: path.join(__dirname, 'jslib/src'),
},
symlinks: false,
2018-04-07 06:24:37 +02:00
modules: [path.resolve('node_modules')],
2018-04-06 23:02:46 +02:00
},
output: {
filename: '[name].js',
2018-04-11 03:54:20 +02:00
path: path.resolve(__dirname, 'build'),
2018-04-06 23:02:46 +02:00
},
2018-04-04 04:14:54 +02:00
module: {
rules: [
{
test: /\.ts$/,
enforce: 'pre',
2018-04-07 06:24:37 +02:00
loader: 'tslint-loader',
2018-04-04 04:14:54 +02:00
},
{
2018-04-06 17:48:45 +02:00
test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/,
2018-04-07 06:24:37 +02:00
loader: '@ngtools/webpack',
2018-04-04 04:14:54 +02:00
},
{
test: /\.(html)$/,
2018-04-07 06:24:37 +02:00
loader: 'html-loader',
2018-04-04 04:14:54 +02:00
},
{
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
exclude: /loading.svg/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'popup/fonts/',
2018-04-07 06:24:37 +02:00
publicPath: './fonts/',
},
}],
2018-04-04 04:14:54 +02:00
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
exclude: /.*(fontawesome-webfont|glyphicons-halflings-regular)\.svg/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'popup/images/',
2018-04-07 06:24:37 +02:00
publicPath: './images/',
},
}],
2018-04-04 04:14:54 +02:00
},
{
test: /\.scss$/,
use: extractCss.extract({
use: [
{
loader: 'css-loader',
},
{
loader: 'sass-loader',
2018-04-07 06:24:37 +02:00
},
2018-04-04 04:14:54 +02:00
],
2018-04-07 06:24:37 +02:00
publicPath: '../',
}),
2018-04-04 04:14:54 +02:00
},
2018-04-07 06:24:37 +02:00
],
2018-04-04 04:14:54 +02:00
},
plugins: [
new CleanWebpackPlugin([
2018-04-11 03:54:20 +02:00
path.resolve(__dirname, 'build/*'),
2018-04-04 04:14:54 +02:00
]),
2018-04-06 17:48:45 +02:00
new AngularCompilerPlugin({
tsConfigPath: 'tsconfig.json',
2018-04-11 03:54:20 +02:00
entryModule: 'src/popup/app.module#AppModule',
2018-04-07 06:24:37 +02:00
sourceMap: true,
2018-04-06 17:48:45 +02:00
}),
2018-04-04 04:14:54 +02:00
// ref: https://github.com/angular/angular/issues/20357
new webpack.ContextReplacementPlugin(
/\@angular(\\|\/)core(\\|\/)esm5/,
2018-04-07 06:24:37 +02:00
path.resolve(__dirname, './src'),
2018-04-04 04:14:54 +02:00
),
new webpack.optimize.CommonsChunkPlugin({
name: 'popup/vendor',
chunks: ['popup/main'],
2018-04-07 06:24:37 +02:00
minChunks: isVendorModule,
2018-04-04 04:14:54 +02:00
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
chunks: ['background'],
2018-04-07 06:24:37 +02:00
minChunks: isVendorModule,
2018-04-04 04:14:54 +02:00
}),
new HtmlWebpackPlugin({
2018-04-11 03:54:20 +02:00
template: './src/popup/index.html',
2018-04-04 04:14:54 +02:00
filename: 'popup/index.html',
2018-04-07 06:24:37 +02:00
chunks: ['popup/vendor', 'popup/main'],
2018-04-04 04:14:54 +02:00
}),
new HtmlWebpackPlugin({
template: './src/background.html',
filename: 'background.html',
2018-04-07 06:24:37 +02:00
chunks: ['vendor', 'background'],
2018-04-04 04:14:54 +02:00
}),
2018-04-11 04:05:23 +02:00
new HtmlWebpackPlugin({
template: './src/notification/bar.html',
filename: 'notification/bar.html',
chunks: ['notification/bar']
}),
2018-04-04 04:14:54 +02:00
new HtmlWebpackPlugin({
template: './src/downloader/index.html',
filename: 'downloader/index.html',
2018-04-07 06:24:37 +02:00
chunks: ['downloader/downloader'],
2018-04-04 04:14:54 +02:00
}),
new HtmlWebpackPlugin({
template: './src/2fa/index.html',
filename: '2fa/index.html',
2018-04-07 06:24:37 +02:00
chunks: ['2fa/2fa'],
2018-04-04 04:14:54 +02:00
}),
new CopyWebpackPlugin([
'./src/manifest.json',
2018-04-04 04:14:54 +02:00
{ from: './src/_locales', to: '_locales' },
{ from: './src/edge', to: 'edge' },
{ from: './src/safari', to: 'safari' },
{ from: './src/images', to: 'images' },
2018-04-11 16:23:12 +02:00
{ from: './src/popup/images', to: 'popup/images' },
2018-04-07 06:24:37 +02:00
{ from: './src/content/autofill.css', to: 'content' },
2018-04-04 04:14:54 +02:00
]),
2018-04-06 18:00:14 +02:00
new webpack.SourceMapDevToolPlugin({
filename: '[name].js.map',
2018-04-07 06:24:37 +02:00
include: ['popup/main.js', 'background.js'],
2018-04-06 18:00:14 +02:00
}),
2018-04-07 06:24:37 +02:00
extractCss,
2018-04-04 04:14:54 +02:00
],
};
2018-04-07 06:24:37 +02:00
module.exports = config;