169 lines
4.2 KiB
JavaScript
Raw Normal View History

2021-04-01 17:47:56 +08:00
const Path = require('path');
2019-03-15 19:10:02 +08:00
let webpack = require('webpack');
let HtmlWebpackPlugin = require('html-webpack-plugin');
let CleanWebpackPlugin = require('clean-webpack-plugin');
let CopyWebpackPlugin = require('copy-webpack-plugin');
2021-04-01 17:47:56 +08:00
const VueLoaderPlugin = require('vue-loader/lib/plugin');
let ChromeManifest = require('./core/chrome-manifest');
2019-03-16 11:10:49 +08:00
2019-03-15 19:10:02 +08:00
if (process.env.NODE_ENV === 'production') {
}
let resolve = function (dir) {
2021-04-01 17:47:56 +08:00
return Path.join(__dirname, dir);
};
2019-03-15 19:10:02 +08:00
let htmlPage = function (title, filename, chunks, template) {
return new HtmlWebpackPlugin({
title: title,
hash: true,
cache: true,
inject: 'body',
filename: './pages/' + filename + '.html',
2021-04-01 17:47:56 +08:00
template: template || Path.resolve(__dirname, 'core/page.ejs'),
2019-03-15 19:10:02 +08:00
appMountId: 'app',
chunks
});
2021-04-01 17:47:56 +08:00
};
2019-03-15 19:10:02 +08:00
module.exports = {
2021-04-01 17:47:56 +08:00
mode: 'development',
2019-03-15 19:10:02 +08:00
entry: {
2021-04-01 19:01:29 +08:00
// test: resolve('test'),
2021-04-01 17:47:56 +08:00
background: resolve('background'),
2019-03-16 11:10:49 +08:00
2019-03-15 19:10:02 +08:00
// devInspector: path.resolve(__dirname, './src/dev/devInspector/main.js'),
// dev: path.resolve(__dirname, './src/dev/dev.js'),
// index: path.resolve(__dirname, './src/index/main.js'),
// backgroundScripts: path.resolve(__dirname, './src/dev/backgroundScripts.js'),
// contentScripts: path.resolve(__dirname, './src/dev/contentScripts.js'),
// util: path.resolve(__dirname, './src/dev/util.js'),
},
output: {
2021-04-01 17:47:56 +08:00
path: Path.resolve(__dirname, 'build'),
2019-03-15 19:10:02 +08:00
publicPath: '/',
filename: 'js/[name].js'
},
plugins: [
2021-04-01 17:47:56 +08:00
new VueLoaderPlugin(),
2019-03-15 19:10:02 +08:00
// new webpack.HotModuleReplacementPlugin(),
// webpack 执行之前删除dist下的文件
new CleanWebpackPlugin(['./build/*'], {
root: __dirname,//根目录
verbose: true,//开启在控制台输出信息
dry: false,//启用删除文件
}),
2019-03-16 11:10:49 +08:00
htmlPage('background', 'background', ['background']),
new ChromeManifest({
2021-04-01 17:47:56 +08:00
outFile: Path.join(__dirname, 'build/manifest.json'),
manifest: Path.join(__dirname, 'manifest.js')
2019-03-16 11:10:49 +08:00
}),
2019-03-15 19:10:02 +08:00
2019-03-16 11:27:49 +08:00
// 拷贝静态资源(manifest.json)
new CopyWebpackPlugin([{
2021-04-01 17:47:56 +08:00
from: Path.resolve(__dirname, 'icon'),
2019-03-16 11:27:49 +08:00
to: 'icon',
force: true,
// ignore: ['.*']
}]),
2019-03-15 19:10:02 +08:00
// new webpack.DefinePlugin({
// 'process.env': {
// NODE_ENV: '"production"'
// }
// }),
// new webpack.optimize.UglifyJsPlugin({
// sourceMap: true,
// compress: {
// warnings: false
// }
// }),
// new webpack.LoaderOptionsPlugin({
// minimize: true
// })
],
module: {
rules: [
{
2021-04-01 17:47:56 +08:00
test: /\.(css)$/,
2019-03-15 19:10:02 +08:00
use: [
'vue-style-loader',
'css-loader'
],
},
2021-04-01 17:47:56 +08:00
{
test: /\.less$/,
use: [
'less-loader'
],
},
2019-03-15 19:10:02 +08:00
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
scss: 'style-loader!css-loader!sass-loader',
sass: 'style-loader!css-loader!sass-loader?indentedSyntax',
2021-04-01 17:47:56 +08:00
less: 'less-loader'
2019-03-15 19:10:02 +08:00
}
// other vue-loader options go here
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
2021-04-01 17:47:56 +08:00
{
test: /\.ts$/,
loader: 'ts-loader',
exclude: /node_modules/
},
2019-03-16 12:31:00 +08:00
// {
// test: /\.(png|jpg|gif|svg|ttf|woff|woff2|eot)$/,
// loader: 'file-loader',
// options: {
// name: '[name].[ext]?[hash]'
// }
// },
2019-03-15 19:10:02 +08:00
{
2019-03-16 12:31:00 +08:00
test: /\.(png|jpg|gif|svg)(\?.*)?$/,
loader: 'url-loader',
2019-03-15 19:10:02 +08:00
options: {
2019-03-16 12:31:00 +08:00
limit: 10000,
name: 'img/[name].[hash:7].[ext]'
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'fonts/[name].[hash:7].[ext]'
2019-03-15 19:10:02 +08:00
}
}
]
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js'
},
2021-04-01 19:01:29 +08:00
extensions: ['*', '.ts', '.js', '.vue', '.json']
2019-03-15 19:10:02 +08:00
},
devServer: {
2021-04-01 17:47:56 +08:00
contentBase: './dist',//本地服务器所加载的页面所在的目录
2019-03-15 19:10:02 +08:00
historyApiFallback: true,//不跳转
noInfo: true,
inline: true,//实时刷新
overlay: true
},
performance: {
hints: false
},
devtool: '#source-map'
};