1
0
mirror of https://github.com/bitwarden/browser.git synced 2024-11-10 09:59:48 +01:00
bitwarden-browser/webpack.common.js
Oscar Hinton 59754cd530 Setup Webpack & TypeScript (#316)
* TypeScript and WebPack.

* Minor cleanup.

* Add background.js as entry point to webpack.

* Use downloaded fonts for better performance.
Remove google-fonts-webpack-plugin.

* Add the remaining entry points and setup notification bar.

* Update readme for webpack.

* Convert CipherItems to TypeScript to demonstrate how a component looks in TS.

* Fix edge requirering a custom angular version.

* Rewrite gulp tasks for packaging releases.

* Re-add the webpack gulp plugin.

* Remove unessesary line in analytics.
2017-10-28 22:14:14 -04:00

97 lines
3.3 KiB
JavaScript

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');
module.exports = {
entry: {
'popup/app': './src/popup/app/app.js',
'background': './src/background.js',
'content/autofill': './src/content/autofill.js',
'content/autofiller': './src/content/autofiller.js',
'content/notificationBar': './src/content/notificationBar.js',
'notification/bar': './src/notification/bar.js',
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
},
{
test: /\.(html)$/,
loader: 'html-loader'
},
{
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'popup/fonts/',
publicPath: '/'
}
}]
}
]
},
plugins: [
new CleanWebpackPlugin([
path.resolve(__dirname, 'dist')
]),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
'Q': 'q'
}),
new webpack.optimize.CommonsChunkPlugin({
name: "popup/vendor",
chunks: ['popup/app'],
minChunks: function (module) {
// this assumes your vendor imports exist in the node_modules directory
return module.context && module.context.indexOf("node_modules") !== -1;
}
}),
new HtmlWebpackPlugin({
template: './src/popup/index.html',
filename: 'popup/index.html',
chunks: ['popup/vendor', 'popup/app', 'fonts']
}),
new HtmlWebpackPlugin({
template: './src/background.html',
filename: 'background.html',
chunks: ['background']
}),
new HtmlWebpackPlugin({
template: './src/notification/bar.html',
filename: 'notification/bar.html',
chunks: ['notification/bar']
}),
new CopyWebpackPlugin([
// Temporarily copy the whole app folder, can be removed once
// the templates uses template rather than using templateUrl.
{ from: './src/popup/app', to: 'popup/app' },
'./src/manifest.json',
{ from: './src/_locales', to: '_locales' },
{ from: './src/edge', to: 'edge' },
{ from: './src/images', to: 'images' },
{ from: './src/lib', to: 'lib' },
{ from: './src/models', to: 'models' },
{ from: './src/overlay', to: 'overlay' },
{ from: './src/scripts', to: 'scripts' },
{ from: './src/services', to: 'services' },
'./src/background.js'
])
],
resolve: {
extensions: [ ".tsx", ".ts", ".js" ]
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
}
};