webpack.common.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. const path = require("path");
  2. const CopyPlugin = require("copy-webpack-plugin");
  3. const { VueLoaderPlugin } = require("vue-loader");
  4. const srcDir = "../src/";
  5. module.exports = {
  6. entry: {
  7. "js/background.js": path.join(__dirname, srcDir + "background.ts"),
  8. "js/helper.js": path.join(__dirname, srcDir + "helper.ts"),
  9. "js/contentScript.js": path.join(__dirname, srcDir + "contentScript.ts"),
  10. "js/presenceManager.js": path.join(
  11. __dirname,
  12. srcDir + "util/presenceManager.ts"
  13. ),
  14. "js/iFrameHandler.js": path.join(
  15. __dirname,
  16. srcDir + "util/iFrameHandler.ts"
  17. ),
  18. "html/popup/app.js": path.join(__dirname, srcDir + "html/popup/app.ts"),
  19. "js/devHelper.js": path.join(__dirname, srcDir + "util/presence/devHelper.ts")
  20. },
  21. output: {
  22. path: path.join(__dirname, "../dist/"),
  23. filename: "[name]",
  24. library: "pmd"
  25. },
  26. optimization: {
  27. splitChunks: {
  28. cacheGroups: {
  29. vendors: {
  30. chunks: "all",
  31. name: "js/vendor.js",
  32. test(module) {
  33. var context = module.context;
  34. if (typeof context !== "string") {
  35. return false;
  36. }
  37. return context.indexOf("node_modules") !== -1;
  38. }
  39. }
  40. }
  41. }
  42. },
  43. module: {
  44. rules: [
  45. {
  46. test: /\.vue$/,
  47. loader: "vue-loader"
  48. },
  49. {
  50. test: /\.(png|woff|woff2|eot|ttf|svg)$/,
  51. use: [
  52. {
  53. loader: "url-loader",
  54. options: {
  55. limit: 100000
  56. }
  57. }
  58. ]
  59. },
  60. {
  61. test: /\.s[ac]ss$/i,
  62. use: ["vue-style-loader", "css-loader", "sass-loader"]
  63. },
  64. {
  65. test: /\.ts?$/,
  66. use: [
  67. {
  68. loader: "ts-loader",
  69. options: {
  70. appendTsSuffixTo: [/\.vue$/]
  71. }
  72. }
  73. ],
  74. exclude: /node_modules/
  75. }
  76. ]
  77. },
  78. resolve: {
  79. extensions: [".ts", ".js", ".vue"]
  80. },
  81. plugins: [
  82. new VueLoaderPlugin(),
  83. new CopyPlugin({
  84. patterns: [
  85. { from: "_locales", to: "_locales", context: "src" },
  86. { from: "assets", to: "assets", context: "src" },
  87. { from: "html", to: "html", context: "src" },
  88. { from: "js", to: "js", context: "src" },
  89. { from: "manifest.json", to: "manifest.json", context: "src" }
  90. ]
  91. })
  92. ]
  93. };