Skip to content

Commit 3cbd2aa

Browse files
committed
refactor: refactor webpack config
1 parent a6848c0 commit 3cbd2aa

18 files changed

+3010
-2262
lines changed

.github/workflows/gh-pages.yml

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: deploy github pages
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
8+
jobs:
9+
deploy-ghpages:
10+
runs-on: ubuntu-18.04
11+
steps:
12+
- uses: actions/checkout@master
13+
- name: Setup Node
14+
uses: actions/setup-node@v1
15+
with:
16+
node-version: 12
17+
- name: install
18+
run: |
19+
yarn install
20+
- name: Build
21+
run: |
22+
yarn demo:prod
23+
- name: Deploy
24+
uses: peaceiris/actions-gh-pages@v3
25+
with:
26+
github_token: ${{ secrets.GITHUB_TOKEN }}
27+
publish_branch: gh-pages
28+
publish_dir: ./dist

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
# production,distfile
1010
/build
11+
/dist
1112

1213
npm-debug.log*
1314
yarn-debug.log*

babel.config.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1+
const { BABEL_ENV, NODE_ENV } = process.env
2+
13
module.exports = {
24
presets: [
35
[
46
'@babel/preset-env',
57
{
6-
targets: {
7-
node: 'current'
8-
}
8+
targets: NODE_ENV === 'test' ? { node: 'current' } : undefined,
9+
loose: true,
10+
// TODO: Add ES Module
11+
// modules: BABEL_ENV === 'cjs' || NODE_ENV === 'test' ? 'commonjs' : false
12+
modules: 'commonjs'
913
}
1014
],
1115
'@babel/preset-typescript'

docs/index.html

-1
This file was deleted.

docs/main.bundle.js

-32
This file was deleted.

docs/main.bundle.js.map

-1
This file was deleted.

lib/index.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/useDrawing.js

+25-32
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,70 @@
1-
var __assign = (this && this.__assign) || function () {
2-
__assign = Object.assign || function(t) {
3-
for (var s, i = 1, n = arguments.length; i < n; i++) {
4-
s = arguments[i];
5-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6-
t[p] = s[p];
7-
}
8-
return t;
9-
};
10-
return __assign.apply(this, arguments);
11-
};
121
import { useRef, useEffect, useCallback } from 'react';
132
import { SvgDrawing } from 'svg-drawing';
143
import { downloadBlob } from './utils/downloadBlob';
15-
export var useSvgDrawing = function (option) {
16-
var renderRef = useRef(null);
17-
var drawingRef = useRef(null);
18-
var getSvgXML = useCallback(function () {
4+
export const useSvgDrawing = (option) => {
5+
const renderRef = useRef(null);
6+
const drawingRef = useRef(null);
7+
const getSvgXML = useCallback(() => {
198
if (!drawingRef.current)
209
return null;
2110
return drawingRef.current.toSvgXml();
2211
}, []);
23-
var download = useCallback(function () {
12+
const download = useCallback(() => {
2413
if (!drawingRef.current)
2514
return;
26-
var base64 = drawingRef.current.toSvgBase64();
15+
const base64 = drawingRef.current.toSvgBase64();
2716
if (!base64)
2817
return;
2918
downloadBlob({
30-
base64: base64,
31-
filename: new Date().toISOString() + ".svg",
19+
base64,
20+
filename: `${new Date().toISOString()}.svg`,
3221
mimeType: 'image/svg+xml'
3322
});
3423
}, []);
35-
var changePenColor = useCallback(function (penColor) {
24+
const changePenColor = useCallback((penColor) => {
3625
if (!drawingRef.current || !penColor)
3726
return;
3827
drawingRef.current.penColor = penColor;
3928
}, []);
40-
var changePenWidth = useCallback(function (penSise) {
29+
const changePenWidth = useCallback((penSise) => {
4130
if (!drawingRef.current)
4231
return;
4332
drawingRef.current.penWidth = Number(penSise);
4433
}, []);
45-
var clear = useCallback(function () {
34+
const clear = useCallback(() => {
4635
if (!drawingRef.current)
4736
return;
4837
drawingRef.current.clear();
4938
}, []);
50-
var undo = useCallback(function () {
39+
const undo = useCallback(() => {
5140
if (!drawingRef.current)
5241
return;
53-
var drawingChildren = drawingRef.current.scene.children;
42+
const drawingChildren = drawingRef.current.scene.children;
5443
if (drawingChildren.length === 0)
5544
return;
5645
drawingRef.current.remove(drawingChildren[drawingChildren.length - 1]);
5746
}, []);
58-
useEffect(function () {
47+
useEffect(() => {
5948
if (drawingRef.current)
6049
return;
6150
if (!renderRef.current)
6251
return;
63-
drawingRef.current = new SvgDrawing(__assign(__assign({}, option), { el: renderRef.current, autostart: true }));
52+
drawingRef.current = new SvgDrawing({
53+
...option,
54+
el: renderRef.current,
55+
autostart: true
56+
});
6457
});
6558
return [
6659
renderRef,
6760
{
6861
two: drawingRef.current,
69-
changePenWidth: changePenWidth,
70-
changePenColor: changePenColor,
71-
clear: clear,
72-
undo: undo,
73-
getSvgXML: getSvgXML,
74-
download: download
62+
changePenWidth,
63+
changePenColor,
64+
clear,
65+
undo,
66+
getSvgXML,
67+
download
7568
}
7669
];
7770
};

lib/utils/downloadBlob.js

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
export var downloadBlob = function (_a) {
2-
var base64 = _a.base64, filename = _a.filename, mimeType = _a.mimeType;
3-
var bin = atob(base64.replace(/^.*,/, ''));
4-
var buffer = new Uint8Array(bin.length);
5-
for (var i = 0; i < bin.length; i++) {
1+
export const downloadBlob = ({ base64, filename, mimeType }) => {
2+
const bin = atob(base64.replace(/^.*,/, ''));
3+
const buffer = new Uint8Array(bin.length);
4+
for (let i = 0; i < bin.length; i++) {
65
buffer[i] = bin.charCodeAt(i);
76
}
8-
var blob = new Blob([buffer.buffer], {
7+
const blob = new Blob([buffer.buffer], {
98
type: mimeType
109
});
1110
if (window.navigator.msSaveBlob) {
1211
window.navigator.msSaveBlob(blob, filename);
1312
}
1413
else if (window.URL && window.URL.createObjectURL) {
15-
var a = document.createElement('a');
14+
const a = document.createElement('a');
1615
a.download = filename;
1716
a.href = window.URL.createObjectURL(blob);
1817
document.body.appendChild(a);

package.json

+7-8
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727
"email": "[email protected]"
2828
},
2929
"scripts": {
30-
"dev": "NODE_ENV=development webpack-dev-server",
31-
"build": "npm-run-all build:*",
32-
"build:lib": "rimraf lib/* && NODE_ENV=production webpack -p && tsc",
33-
"build:demo": "rimraf docs/* && NODE_ENV=development webpack -p",
34-
"sample": "webpack-dev-server server.js",
35-
"test": "jest --passWithNoTests",
36-
"prepare": "yarn build:lib",
30+
"lib": "webpack --config webpack.lib.js",
31+
"lib:dev": "NODE_ENV=development webpack -w",
32+
"lib:prod": "rimraf lib/*;NODE_ENV=production yarn lib -p; tsc",
33+
"demo:dev": "NODE_ENV=development webpack-dev-server --config webpack.demo.js",
34+
"demo:prod": "webpack --config webpack.demo.js -p",
35+
"test": "NODE_ENV=test jest --passWithNoTests",
36+
"prepare": "yarn lib:prod",
3737
"release": "release-it"
3838
},
3939
"dependencies": {
@@ -88,7 +88,6 @@
8888
"html-webpack-plugin": "3.2.0",
8989
"jest": "24.9.0",
9090
"node-sass": "4.12.0",
91-
"npm-run-all": "4.1.5",
9291
"postcss-loader": "3.0.0",
9392
"pressure": "2.1.2",
9493
"prettier": "1.18.2",

src/example/index.tsx renamed to src/example/app.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import React, {
77
} from 'react'
88
import { render } from 'react-dom'
99
import Pressure from 'pressure'
10-
import { useSvgDrawing } from '../'
10+
import { useSvgDrawing } from '..'
1111

1212
const getRandomInt = (max: number): number =>
1313
Math.floor(Math.random() * Math.floor(max))
File renamed without changes.

tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"baseUrl": ".",
44
"outDir": "./lib",
5-
"target": "es5",
5+
"target": "esnext",
66
"module": "esnext",
77
"lib": ["es2018", "es2017", "dom"],
88
"jsx": "react",

webpack.config.js

+19-30
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,40 @@
1-
const { resolve } = require('path')
2-
const { smart } = require('webpack-merge')
3-
const devMode = process.env.NODE_ENV === 'development'
4-
const config = devMode
5-
? require('./webpack.dev.config')
6-
: require('./webpack.prod.config')
7-
8-
const common = {
1+
const eslintLoader = {
2+
loader: 'eslint-loader',
3+
options: {
4+
failOnWarning: false
5+
}
6+
}
7+
module.exports = {
98
module: {
109
rules: [
1110
{
1211
enforce: 'pre',
13-
test: /\.(j|t)sx?$/,
12+
test: /\.jsx?$/,
1413
exclude: /node_modules/,
15-
use: [
16-
{
17-
loader: 'eslint-loader',
18-
options: {
19-
failOnWarning: true
20-
}
21-
}
22-
]
14+
use: [eslintLoader]
2315
},
2416
{
25-
test: /\.js|.jsx$/,
17+
enforce: 'pre',
18+
test: /\.tsx?$/,
2619
exclude: /node_modules/,
2720
use: [
2821
{
29-
loader: 'babel-loader',
22+
loader: 'ts-loader',
3023
options: {
31-
presets: ['@babel/preset-env', '@babel/preset-typescript']
24+
transpileOnly: true
3225
}
33-
}
26+
},
27+
eslintLoader
3428
]
3529
},
3630
{
37-
test: /\.ts|.tsx$/,
31+
test: /\.[jt]sx?$/,
3832
exclude: /node_modules/,
3933
use: [
4034
{
41-
loader: 'ts-loader',
35+
loader: 'babel-loader',
4236
options: {
43-
transpileOnly: true
37+
presets: ['@babel/preset-env', '@babel/preset-typescript']
4438
}
4539
}
4640
]
@@ -61,11 +55,6 @@ const common = {
6155
]
6256
},
6357
resolve: {
64-
extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
65-
alias: {
66-
'@': resolve(__dirname, 'src')
67-
}
58+
extensions: ['.js', '.jsx', '.ts', '.tsx', '.json']
6859
}
6960
}
70-
71-
module.exports = smart(common, config)

webpack.demo.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const { join, resolve } = require('path')
2+
const HtmlWebpackPlugin = require('html-webpack-plugin')
3+
const { smart } = require('webpack-merge')
4+
const common = require('./webpack.config')
5+
6+
const isDev = process.env.NODE_ENV !== 'production'
7+
8+
module.exports = smart(common, {
9+
mode: isDev ? 'development' : 'production',
10+
entry: resolve(__dirname, 'src/example/app.tsx'),
11+
output: {
12+
filename: '[name].bundle.js',
13+
path: resolve(__dirname, 'dist')
14+
},
15+
devtool: isDev ? 'source-map' : false,
16+
plugins: [
17+
new HtmlWebpackPlugin({
18+
template: resolve(__dirname, 'src/example/index.html')
19+
})
20+
],
21+
devServer: {
22+
contentBase: join(__dirname, 'dist'),
23+
compress: true,
24+
port: 8888
25+
}
26+
})

webpack.dev.config.js

-24
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
const { resolve } = require('path')
2+
const { smart } = require('webpack-merge')
3+
const common = require('./webpack.config')
24

3-
const config = {
4-
mode: 'production',
5+
const isDev = process.env.NODE_ENV !== 'production'
6+
7+
module.exports = smart(common, {
8+
mode: isDev ? 'development' : 'production',
59
entry: resolve(__dirname, 'src/index.ts'),
610
output: {
711
filename: 'index.min.js',
812
path: resolve('lib'),
913
library: 'react-hooks-svgdrawing',
1014
libraryTarget: 'umd'
1115
},
12-
devtool: false,
16+
devtool: isDev ? 'eval-source-map' : false,
1317
externals: {
1418
react: 'react'
1519
},
1620
plugins: [],
1721
optimization: {
1822
minimize: true
1923
}
20-
}
21-
22-
module.exports = config
24+
})

0 commit comments

Comments
 (0)