123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- const CopyWebpackPlugin = require("copy-webpack-plugin");
- const AutoImport = require("unplugin-auto-import/webpack");
- const Components = require("unplugin-vue-components/webpack");
- const { ElementPlusResolver } = require("unplugin-vue-components/resolvers");
- const ExtReloader = require('webpack-ext-reloader');
- const ReplaceCssPlugin = require("./script/replaceCssPlugin.js");
- const path = require("path");
- const isProduction = process.env.NODE_ENV === "production";
- // 只需要复制的文件
- const copyFiles = [
- {
- from: path.resolve(`src/manifest.json`),
- to: `${path.resolve("dist")}/manifest.json`,
- },
- {
- from: path.resolve("src/assets"),
- to: path.resolve("dist/assets"),
- },
- ];
- const plugins = [
- new CopyWebpackPlugin({
- patterns: copyFiles,
- }),
- //仅支持webpack4.x 不支持5.x 需要自己手动改造5.x版本
- /* new ExtReloader({
- port: 9091, // Which port use to create the server
- reloadPage: true, // Force the reload of the page also
- entries: { // The entries used for the content/background scripts or extension pages
- contentScript: 'content',
- background: 'background',
- extensionPage: 'popup',
- },
- }), */
- new ReplaceCssPlugin(),
- AutoImport({
- include: [
- /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
- /\.vue$/,
- /\.vue\?vue/, // .vue
- ],
- imports: [
- // 插件预设好包
- "vue",
- // 自定义要自动按需引入的npm包
- {
- axios: [
- // default imports
- ["default", "axios"], // import { default as axios } from 'axios',
- ],
- },
- ],
- dts: false,
- eslintrc: {
- enabled: false, // 默认false, true启用。生成一次就可以,避免每次工程启动都生成
- filepath: "./.eslintrc-auto-import.json", // 生成json文件
- globalsPropValue: true,
- },
- resolvers: [ElementPlusResolver()],
- }),
- Components({
- resolvers: [ElementPlusResolver()],
- }),
- ];
- // 配置页面
- const pages = {};
- /**
- * popup 和 devtool 都需要html文件
- * 因此 chromeName 还可以添加devtool
- */
- const chromeName = ["popup"];
- chromeName.forEach((name) => {
- pages[name] = {
- entry: `src/${name}/index.js`,
- template: `src/${name}/index.html`,
- filename: `${name}.html`,
- };
- });
- module.exports = {
- pages,
- // 生产环境是否生成 sourceMap 文件
- productionSourceMap: false,
- /* pluginOptions: {
- 'style-resources-loader': {
- preProcessor: 'less',
- patterns: [path.resolve(__dirname, './src/assets/css/default.less')]
- }
- }, */
- configureWebpack: {
- // 多入口打包
- entry: {
- content: "./src/content/index.js",
- background: "./src/background/index.js",
- },
- resolve: {
- alias: {
- '@': path.resolve('src'),
- }
- },
- output: {
- filename: "js/[name].js",
- },
- plugins,
- optimization: {
- splitChunks: {
- chunks: "async",
- minSize: 20000,
- minRemainingSize: 0,
- minChunks: 1,
- maxAsyncRequests: 30,
- maxInitialRequests: 30,
- enforceSizeThreshold: 50000,
- cacheGroups: {
- defaultVendors: {
- test: /[\\/]node_modules[\\/]/,
- priority: -10,
- reuseExistingChunk: true,
- },
- default: {
- minChunks: 2,
- priority: -20,
- reuseExistingChunk: true,
- },
- },
- },
- },
- },
- //配置less解析和浏览器自动补全前缀
- chainWebpack: (config) => {
- config.module.rule('less')
- .test(/\.less$/)
- .use('style-loader')
- .loader('style-loader')
- .end()
- .use('css-loader')
- .loader('css-loader')
- .end()
- .use('postcss-loader')
- .loader('postcss-loader')
- .end()
- .use('less-loader')
- .loader('less-loader')
- .end()
- },
- css: {
- extract: {
- filename: "css/[name].css",
- },
- },
- /* devServer: {
- lazy: false,
- // 将 bundle 写到磁盘而不是内存
- writeToDisk: true,
- before(app, serve, compiler) {
- reloadServer(app, compiler);
- }
- } */
- };
|