Skip to content

Commit

Permalink
switch to webpack for build
Browse files Browse the repository at this point in the history
  • Loading branch information
aeroheim committed Sep 3, 2021
1 parent 23d6cd1 commit f02591b
Show file tree
Hide file tree
Showing 10 changed files with 12,658 additions and 2,990 deletions.
2 changes: 1 addition & 1 deletion .eslintignore
@@ -1,3 +1,3 @@
node_modules/
dist/
webpack.config.js
*.js
9 changes: 8 additions & 1 deletion .eslintrc
Expand Up @@ -5,7 +5,9 @@
"plugin:import/warnings",
"plugin:import/typescript",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking"
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:react/recommended",
"plugin:react-hooks/recommended"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
Expand All @@ -17,6 +19,11 @@
"browser": true,
"node": true
},
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"max-len": "off",
"prefer-destructuring": ["error", {
Expand Down
15,403 changes: 12,503 additions & 2,900 deletions package-lock.json

Large diffs are not rendered by default.

38 changes: 21 additions & 17 deletions package.json
Expand Up @@ -25,17 +25,18 @@
"url": "https://aeroheim.moe/"
},
"main": "./dist/midori.js",
"module": "./dist/midori.js",
"types": "./dist/midori.d.ts",
"files": [
"/dist/midori.js",
"/dist/midori.d.ts"
],
"scripts": {
"prepublishOnly": "npm run test && npm run build-prod",
"dev": "npm run clean && npm run types && rollup -c -w --environment BUILD:development",
"prod": "npm run clean && npm run types && rollup -c -w --environment BUILD:production",
"build-dev": "npm run clean && npm run types && rollup -c --environment BUILD:development",
"build-prod": "npm run clean && npm run types && rollup -c --environment BUILD:production",
"dev": "npm run clean && concurrently \"webpack -w --config webpack.dev.js --config-name lib\" \"webpack-dev-server --config webpack.dev.js --config-name docs\"",
"prod": "npm run clean && concurrently \"webpack -w --config webpack.prod.js --config-name lib\" \"webpack-dev-server --config webpack.prod.js --config-name docs\"",
"build-dev": "npm run clean && webpack --config webpack.dev.js --config-name lib && webpack --config webpack.dev.js --config-name docs",
"build-prod": "npm run clean && webpack --config webpack.prod.js --config-name lib && webpack --config webpack.prod.js",
"clean": "rimraf ./dist && rimraf ./docs/dist",
"types": "dts-bundle-generator --project tsconfig.json ./src/midori.ts -o ./dist/midori.d.ts --external-imports three",
"lint": "tsc --project tsconfig.json --noEmit && eslint src/*/**.ts"
Expand All @@ -47,30 +48,33 @@
"@babel/preset-env": "^7.13.9",
"@babel/preset-react": "^7.12.13",
"@babel/preset-typescript": "^7.13.0",
"@rollup/plugin-babel": "^5.3.0",
"@rollup/plugin-commonjs": "^17.1.0",
"@rollup/plugin-eslint": "^8.0.1",
"@rollup/plugin-node-resolve": "^11.2.0",
"@rollup/plugin-replace": "^2.4.1",
"@types/three": "^0.126.0",
"@typescript-eslint/eslint-plugin": "^4.16.1",
"@typescript-eslint/parser": "^4.16.1",
"babel-loader": "^8.2.2",
"concurrently": "^6.2.1",
"dts-bundle-generator": "^5.7.0",
"eslint": "^7.21.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-react": "^7.25.1",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-webpack-plugin": "^3.0.1",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"rimraf": "^3.0.2",
"rollup": "^2.40.0",
"rollup-plugin-filesize": "^9.1.1",
"rollup-plugin-livereload": "^2.0.0",
"rollup-plugin-serve": "^1.1.0",
"rollup-plugin-terser": "^7.0.2",
"typescript": "^4.2.3"
"three": "^0.126.1",
"typescript": "^4.2.3",
"webpack": "^5.51.2",
"webpack-bundle-analyzer": "^4.4.2",
"webpack-cli": "^4.8.0",
"webpack-dev-server": "^4.1.0",
"webpack-merge": "^5.8.0"
},
"dependencies": {
"@babel/runtime": "^7.13.9",
"@tweenjs/tween.js": "^18.6.4",
"@types/three": "^0.126.0",
"@tweenjs/tween.js": "^18.6.4"
},
"peerDependencies": {
"three": "^0.126.1"
}
}
60 changes: 0 additions & 60 deletions rollup.config.js

This file was deleted.

20 changes: 10 additions & 10 deletions src/pipeline/effect-pass.ts
Expand Up @@ -102,8 +102,8 @@ class EffectPass extends Pass {
this._writeBuffer.setSize(width, height);

for (const effect of Object.values(this._effects)) {
if (effect!.setSize) {
effect!.setSize(width, height);
if (effect.setSize) {
effect.setSize(width, height);
}
}
}
Expand All @@ -117,32 +117,32 @@ class EffectPass extends Pass {
for (const [type, effect] of Object.entries(this._effects)) {
switch (type) {
case EffectType.Blur: {
const { radius } = effect!.getUniforms();
const { radius } = effect.getUniforms();
configs[type] = { radius, passes: (effect as GaussianBlurEffect).passes };
break;
}
case EffectType.Bloom: {
const { opacity, radius } = effect!.getUniforms();
const { opacity, radius } = effect.getUniforms();
configs[type] = { opacity, radius, passes: (effect as BloomEffect).passes };
break;
}
case EffectType.RgbShift: {
const { amount, angle } = effect!.getUniforms();
const { amount, angle } = effect.getUniforms();
configs[type] = { amount, angle };
break;
}
case EffectType.Vignette: {
const { offset, darkness } = effect!.getUniforms();
const { offset, darkness } = effect.getUniforms();
configs[type] = { offset, darkness };
break;
}
case EffectType.VignetteBlur: {
const { size, radius } = effect!.getUniforms();
const { size, radius } = effect.getUniforms();
configs[type] = { size, radius, passes: (effect as VignetteBlurEffect).passes };
break;
}
case EffectType.Glitch: {
const { amount, seed } = effect!.getUniforms();
const { amount, seed } = effect.getUniforms();
configs[type] = { amount, seed };
break;
}
Expand Down Expand Up @@ -303,7 +303,7 @@ class EffectPass extends Pass {
render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget | null, readBuffer: WebGLRenderTarget): void {
this._copyShader.render(renderer, this._readBuffer, readBuffer);
for (const effect of Object.values(this._effects)) {
effect!.render(renderer, this._writeBuffer, this._readBuffer);
effect.render(renderer, this._writeBuffer, this._readBuffer);
this._swapBuffers();
}
this._copyShader.render(renderer, this.renderToScreen ? null : writeBuffer, this._readBuffer);
Expand All @@ -318,7 +318,7 @@ class EffectPass extends Pass {
this._readBuffer.texture.dispose();
this._writeBuffer.dispose();
this._writeBuffer.texture.dispose();
Object.values(this._effects).forEach(effect => effect!.dispose());
Object.values(this._effects).forEach(effect => effect.dispose());
}
}

Expand Down
4 changes: 3 additions & 1 deletion tsconfig.json
Expand Up @@ -3,11 +3,13 @@
"declaration": true,
"module": "es6",
"target": "es6",
"jsx": "react",
"moduleResolution": "node",
"strictNullChecks": true,
},
"include": [
"src/**/*"
"src/**/*",
"docs/**/*",
],
"exclude": ["node_modules"]
}
74 changes: 74 additions & 0 deletions webpack.config.js
@@ -0,0 +1,74 @@
const path = require('path');
const ESLintWebpackPlugin = require('eslint-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

const extensions = ['.js', '.jsx', '.ts', '.tsx'];

const libConfig = {
name: 'lib',
entry: './src/midori.ts',
output: {
filename: 'midori.js',
path: path.resolve(__dirname, 'dist'),
library: {
name: 'midori',
type: 'umd',
},
},
resolve: { extensions },
externals: [
'three',
/^three\/.+$/,
],
module: {
rules: [
{
test: /\.(j|t)s$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-typescript'],
plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-transform-runtime'],
}
}
]
},
plugins: [
new ESLintWebpackPlugin({ files: 'src/', extensions, emitWarning: true }),
new BundleAnalyzerPlugin({ openAnalyzer: false, analyzerMode: 'static' }),
],
};

const docsConfig = {
name: 'docs',
entry: './docs/index.jsx',
output: {
filename: 'dist/index.js',
path: path.resolve(__dirname, 'docs'),
},
resolve: { extensions },
module: {
rules: [
{
test: /\.(j|t)sx$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-typescript', '@babel/preset-react'],
plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-transform-runtime'],
}
},
]
},
devServer: {
static: {
directory: path.resolve(__dirname, 'docs'),
}
},
plugins: [ new ESLintWebpackPlugin({ files: 'docs/', extensions, emitWarning: true }) ],
};

module.exports = {
libConfig,
docsConfig,
};
19 changes: 19 additions & 0 deletions webpack.dev.js
@@ -0,0 +1,19 @@
const { merge } = require('webpack-merge');
const { libConfig, docsConfig } = require('./webpack.config.js');

const devConfig = {
mode: 'development',
devtool: 'eval-source-map',
};

const libDevConfig = merge(libConfig, devConfig);
const docsDevConfig = merge(docsConfig, devConfig);

module.exports = {
libConfig: libDevConfig,
docsConfig: docsDevConfig,
default: [
libDevConfig,
docsDevConfig,
]
};
19 changes: 19 additions & 0 deletions webpack.prod.js
@@ -0,0 +1,19 @@
const { merge } = require('webpack-merge');
const { libConfig, docsConfig } = require('./webpack.config.js');

const prodConfig = {
mode: 'production',
devtool: 'source-map',
};

const libProdConfig = merge(libConfig, prodConfig);
const docsProdConfig = merge(docsConfig, prodConfig);

module.exports = {
libConfig: libProdConfig,
docsConfig: docsProdConfig,
default: [
libProdConfig,
docsProdConfig,
]
};

0 comments on commit f02591b

Please sign in to comment.