diff --git a/package-lock.json b/package-lock.json index 34ee2c7..2db5a6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5960,6 +5960,15 @@ "@types/har-format": "*" } }, + "@types/copy-webpack-plugin": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/copy-webpack-plugin/-/copy-webpack-plugin-6.4.0.tgz", + "integrity": "sha512-f5mQG5c7xH3zLGrEmKgzLLFSGNB7Y4+4a+a1X4DvjgfbTEWEZUNNXUqGs5tBVCtb5qKPzm2z+6ixX3xirWmOCg==", + "dev": true, + "requires": { + "@types/webpack": "*" + } + }, "@types/eslint": { "version": "7.2.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", @@ -10350,6 +10359,95 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "copy-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-SLjQNa5iE3BoCP76ESU9qYo9ZkEWtXoZxDurHoqPchAFRblJ9g96xTeC560UXBMre1Nx6ixIIUfiY3VcjpJw3g==", + "dev": true, + "requires": { + "fast-glob": "^3.2.4", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, "core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", diff --git a/package.json b/package.json index 2c13bfb..594781b 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ }, "devDependencies": { "@types/chrome": "0.0.128", + "@types/copy-webpack-plugin": "^6.4.0", "@types/jest": "^26.0.20", "@types/jquery": "^3.5.5", "@types/node": "^14.14.20", @@ -63,6 +64,7 @@ "browserify": "^17.0.0", "chai": "^4.1.2", "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^7.0.0", "del": "^3.0.0", "eslint": "^7.17.0", "eslint-config-kentcdodds": "^17.3.0", diff --git a/webpack.config.ts b/webpack.config.ts index 2eaee36..6ec7995 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -1,12 +1,17 @@ -import * as path from 'path'; +/* eslint-disable @typescript-eslint/no-unsafe-call */ +import { join } from 'path'; import * as webpack from 'webpack'; import { CleanWebpackPlugin } from 'clean-webpack-plugin'; +import CopyPlugin from 'copy-webpack-plugin'; +const publicFolder = join(__dirname, 'public'); +const cssFolder = join(publicFolder, 'css'); +const fontFolder = join(publicFolder, 'fonts'); export default (): webpack.Configuration[] => { const cfgs: webpack.Configuration[] = []; const chromeExtCfg: webpack.Configuration = { entry: { - app: [path.join(__dirname, 'src', 'app.tsx')], + app: [join(__dirname, 'src', 'app.tsx')], }, module: { rules: [ @@ -18,9 +23,17 @@ export default (): webpack.Configuration[] => { }, output: { filename: '[name].js', - path: path.join(__dirname, 'dist', 'chrome'), + path: join(__dirname, 'dist', 'chrome'), }, - plugins: [new CleanWebpackPlugin()], + plugins: [ + new CleanWebpackPlugin(), + new CopyPlugin({ + patterns: [ + { from: cssFolder, to: 'public/css' }, + { from: fontFolder, to: 'public/fonts' }, + ], + }), + ], resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx'], },