This post is about creating a p5.js development using webpack and typescript. (Please install Node.js beforehand and make sure npm is available.)
Step 1: Install libraries
First, create a project directory and install libraries.
mkdir p5-project cd p5-project npm init -y npm i -D webpack webpack-cli webpack-dev-server typescript ts-loader @types/p5 npm i p5
Delete "main":"index.js"
in package.json and add "private":true
{ "name": "p5-project", "version": "1.0.0", "description": "", "private": true, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@types/p5": "^1.4.2", "ts-loader": "^9.3.0", "typescript": "^4.6.4", "webpack": "^5.72.1", "webpack-cli": "^4.9.2", "webpack-dev-server": "^4.9.0" }, "dependencies": { "p5": "^1.4.1" } }
According to webpack documentation, this is to prevent an accidental publication of your code.
Step 2: Create directories and files
Create src
and dist
directories, webpack.config.js
, tsconfig.json
and global.d.ts
files under the project directory.
The dist directory contains index.html
, and the src directory contains index.ts
.
p5-project |- package.json |- package-lock.json |- webpack.config.js |- tsconfig.json |- /dist |- index.html |- /src |- index.ts
Each file should be written with reference to the following.
webpack.config.js
const path = require('path'); module.exports = { mode: "development", entry: './src/index.ts', module: { rules: [ { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/, }, ], }, resolve: { extensions: ['.tsx', '.ts', '.js'], }, output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, devServer: { static: './dist', } };
tsconfig.json
{ "compilerOptions": { "outDir": "./dist/", "noImplicitAny": true, "module": "es6", "target": "es5", "jsx": "react", "allowJs": true, "moduleResolution": "node" } }
global.d.ts
import module = require('p5'); export = module; export as namespace p5;
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>P5 Project</title> </head> <body> <script src="bundle.js"></script> </body> </html>
index.ts
import * as p5 from 'p5'; export const sketch = (p: p5) => { p.setup = () => { p.createCanvas(400, 400); } p.draw = () => { p.background(220); p.ellipse(50,50,80,80); } } export const myp5 = new p5(sketch, document.body);
Using the p5 instance mode to avoid possible conflicts with your own function names or other libraries.
Step 3: Add npm scripts and try to build
Add "start": "webpack serve --open"
in package.json and type npm run start
in a terminal.
{ "name": "p5-project", "version": "1.0.0", "description": "", "private": true, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "webpack serve --open" //add }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@types/p5": "^1.4.2", "ts-loader": "^9.3.0", "typescript": "^4.6.4", "webpack": "^5.72.1", "webpack-cli": "^4.9.2", "webpack-dev-server": "^4.9.0" }, "dependencies": { "p5": "^1.4.1" } }
You can see the circle in the canvas on the browser.
I hope you find this article helpful!
Happy Creative Coding!
Resource refrences:
Top comments (0)