webpack打包工具之ts版开发框架搭建
本文用两个框架,一个是threejs,一个是phaser3,其实流程都是一样。
nodejs、npm是基础,不再多说!
首先新建一个文件夹命名three-study,然后npm init -y
用webpack工具,第一步要安装webpack主功能包:
npm i webpack --save-dev npm i webpack-cli --save-dev
这两个包是webpack最基础的包,如果仅仅只是用于打包,这两个足够了(--save-dev的意思是仅仅用于开发环境)。
接下来第二步为里调试方便,需要安装webpack-dev-server
npm i webpack-dev-server --save-dev
这个包是一个用来快速搭建本地运行环境的工具,通常情况下package.json里的dev或start调试模式都是用它,常用方式:
webpack-dev-server --config webpack.conf.js
其相关配置可自行百度,一般会配置到webpack.conf.js里。
第三步:安装html-webpack-plugin
npm i html-webpack-plugin --save-dev
这个包就是将打包后的js自动添加到目标index.html模板文件里,省去每次打包都手动操作的麻烦。
第三步:安装ts-loader,typescript,这是ts语言的配置,所有用到ts开发的都必须安装这两个依赖
npm i ts-loader --save-dev
npm i typescript --save-dev
第四步:创建ts配置文件,tsconfig.json,ts的运行必须要有tsconfig文件,否则无法运行和转换成js,我的配置如下:
{
"compilerOptions": {
"module": "commonjs",
"sourceMap": true,
"target": "es5"
},
"include": [
"src/*"
],
"exclude": [
"node_modules"
]
}
接下来安装file-loader和clean-webpack-plugin,file-loader用于资源加载配置,而clean-webpack-plugin则仅仅是打包的时候清除本地原来的打包文件,相当于保持最新,非必须
npm i file-loader --save-dev
npm i clean-webpack-plugin --save-dev
到这里所有工具依赖全部安装完成,接下来就是我们要开发的包如phaser或threejs,这里注意一定要安装到依赖环境,即--save 而不是--save-dev
npm i three --save
整个package.json依赖如下
{
"name": "three-study",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start":"webpack-dev-server --config webpack.conf.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"clean-webpack-plugin": "^3.0.0",
"file-loader": "^5.0.2",
"html-webpack-plugin": "^3.2.0",
"ts-loader": "^6.2.1",
"typescript": "^3.7.3",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.10",
"webpack-dev-server": "^3.9.0"
},
"dependencies": {
"three": "^0.111.0"
}
}
好了,接下来配置webpack.conf.js文件,让程序运行起来,我的配置如下
const path = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode:'development',
entry:'./src/Main.ts',
output:{
path:path.resolve(__dirname,'./public'),
filename:'app.bundle.js'
},
devServer:{
//设置服务器访问的基本目录
contentBase:path.resolve(__dirname,'./public'),
host:'172.18.27.110',
port:1222, // 设置端口号
inline:true
},
module:{
rules:[
{
test:/\.tsx?$/,
use:'ts-loader',
exclude:/node_modules/
},
{
test:/\.(png|jpe?g|gif|svg)(\?.*)?$/,
use:{
loader:'file-loader',
options:{
name:'[name].[ext]',
outputPath:'assets/'
}
}
}
]
},
resolve:{
extensions:['.ts','.tsx','.js']
},
devtool:"eval",
plugins:[
new HtmlWebpackPlugin({
template:'index.html'
})
]
}
其中172.18.27.110是我自己电脑的局域网ip,其他各项配置均可查询官方文档,这里不再扯远。
最后一步,根目录创建一个index.html模板文件,然后创建一个src和public文件夹,public文件夹主要用来存放资源,在src下创建一个Main.ts文件,编写代码如下
import * as THREE from 'three'
class Main{
constructor(){
this.init();
}
private scene:THREE.Scene;
private camera:THREE.Camera;
private renderer:THREE.WebGLRenderer;
private myCube:THREE.Mesh;
private init(){
let scene = new THREE.Scene();
this.scene = scene;
let camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,.01,1000);
this.camera = camera;
let renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
document.body.appendChild(renderer.domElement);
this.renderer = renderer;
let geometry = new THREE.BoxGeometry(1,1,1);
let material = new THREE.MeshBasicMaterial({color:0xfff000});
let cube = new THREE.Mesh(geometry,material);
scene.add(cube);
this.myCube = cube;
camera.position.z = 5;
this.animate();
}
private animate(){
requestAnimationFrame(this.animate.bind(this));
this.renderer.render(this.scene,this.camera);
this.loop();
}
private loop(){
this.myCube.rotation.x += 0.01;
this.myCube.rotation.y += 0.01;
this.myCube.rotation.z += 0.01;
}
}
new Main();
在命令行运行npm run start,然后打开浏览器输入172.18.27.110:1222即可看到如下效果

对于phaser,也是如此配置,这里仅仅配置里一个dev环境,其实还有个线上打包环境,我一般分成dev.conf.js和prd.conf.js,分别代表dev和生产环境,这里有个生产环境配置可作参考
const path = require("path");
const CleanWebpackPlugin = require("clean-webpack-plugin").CleanWebpackPlugin;
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode:'production',
devtool:"source-map",
entry:'./src/Main.ts',
output:{
filename:'js/[name].[chunkhash].js',
path:path.resolve(__dirname,'.././dist')
},
module:{
rules:[
{
test:/\.tsx?$/,
use:'ts-loader',
exclude:/node_modules/
},
{
test:/\.(png|jpe?g|gif|svg)(\?.*)?$/,
use:{
loader:'file-loader',
options:{
name:'[name].[ext]',
outputPath:'assets/'
}
}
}
]
},
resolve:{
extensions:['.ts','.tsx','.js']
},
optimization:{
splitChunks:{
name:"vendor",
chunks:"all"
}
},
plugins:[
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template:'index.html'
})
]
}
webpack打包工具之ts版开发框架搭建的更多相关文章
- vue之webpack打包工具的使用
vue之webpack打包工具的使用 一.什么是webpack? webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个 ...
- vue 之webpack打包工具的使用
一.什么是webpack? webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个.vue文件中都可能html.js.c ...
- Vue学习【第四篇】:Vue 之webpack打包工具的使用
什么是webpack webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个.vue文件中都可能html.js.css甚 ...
- Webpack打包工具学习使用
Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载.通过 ...
- webpack打包工具的初级使用方法
这里下载的是webpack的3.8.1版本(新版更新的使用有些问题) 什么是webpack? 他是一个前端资源加载或打包工具,. 资源: img css json等. 下载的话 用 npm webpa ...
- # webpack 打包工具(vue)
vue-webpack 打包工具 我的github iSAM2016 不是教程,是自我总结 目录 webpack.base.conf.js webpack.dev.conf.js webpack.pr ...
- Webpack实战(一):Webpack打包工具安装及参数配置
为什么要模块化 javascript跟其他开发语言有很多的区别,其中一个就是没有模块化概念,如果一个项目中有多个js文件,我们只能通过script标签引入的方式,把一个个js文件插入到页面,这种做法会 ...
- webpack打包工具
目的:平时小项目中例如一些网站需要进行打包压缩,用这个工具可以进行打包压缩,就可以上传到服务器. 使用方法: 1,引进需要打包的项目,把入口html替换掉项目中的index.html,把引进的js,c ...
- DropDMG for Mac(dmg 文件打包工具)破解版安装
1.软件简介 DropDMG 是 macOS 系统上的一款帮助用户快速打包 DMG 文件的 Mac 文件管理软件,DropDMG 不但可以将影像档加密.更可以配合 GZip .BZip2 .Ma ...
随机推荐
- Java基础 面试总结(一)
一.java基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机( ...
- luogu P2765 魔术球问题 (最小路径覆盖)
大意:给定n根柱子, 依次放入1,2,3,...的球, 同一根柱子相邻两个球和为完全平方数, 求最多放多少个球. 对和为平方数的点连边, 就相当于求DAG上最小路径覆盖. #include <i ...
- jq之display:none与visible:hidden
http://www.cnblogs.com/linxiong945/p/4075146.html 今天学习到jquery的hide()部分时,突然有一个想法,jquery中的隐藏/显示部分的实现是给 ...
- java lesson20homework
package com.xt.lesson20; /** * 简易自动提款机 1. 创建用户类User(包含卡号.姓名.密码.余额等属性),用户开卡时录入的姓名和密码(自动分配一个卡号.初始金额设置为 ...
- QT 安卓 调用java类
用以下方式即可调用java类中的方法 QAndroidJniObject activity = QtAndroid::androidActivity(); QAndroidJniObject Devi ...
- react绑定事件的几种写法
方法一:最麻烦的写法,不推荐 import React from 'react'; class App extends React.Component { handleClick() { alert( ...
- shiro学习(三,shiro加密)
shiro加密 使用MD5加密 认证 //自定义的Realm 域 public class CustomRealmSecret extends AuthorizingRealm { @Overrid ...
- vue报错Maximum call stack size exceeded at abort (webpack-internal:///./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js:2079)
报错原因: import cellDetail from '@/components/common/dialog/cellDetail.vue'; 解决方法: import celldetail fr ...
- 【玩转SpringBoot】通过事件机制参与SpringBoot应用的启动过程
生命周期和事件监听 一个应用的启动过程和关闭过程是归属到“生命周期”这个概念的范畴. 典型的设计是在启动和关闭过程中会触发一系列的“事件”,我们只要监听这些事件,就能参与到这个过程中来. 要想监听事件 ...
- webpack初体验_集成插件_集成loader
webpack初体验 如果没装 webpack 就先装一下,命令行输入npm i webpack -g 新建一个项目 创建一个空的项目 定义一个名称 创建一个Module 选择静态 web 输入名称 ...