本文用两个框架,一个是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版开发框架搭建的更多相关文章

  1. vue之webpack打包工具的使用

    vue之webpack打包工具的使用 一.什么是webpack? webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个 ...

  2. vue 之webpack打包工具的使用

    一.什么是webpack? webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个.vue文件中都可能html.js.c ...

  3. Vue学习【第四篇】:Vue 之webpack打包工具的使用

    什么是webpack webpack是一个模块打包工具.用vue项目来举例:浏览器它是只认识js,不认识vue的.而我们写的代码后缀大多是.vue的,在每个.vue文件中都可能html.js.css甚 ...

  4. Webpack打包工具学习使用

    Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载.通过 ...

  5. webpack打包工具的初级使用方法

    这里下载的是webpack的3.8.1版本(新版更新的使用有些问题) 什么是webpack? 他是一个前端资源加载或打包工具,. 资源: img css json等. 下载的话 用 npm webpa ...

  6. # webpack 打包工具(vue)

    vue-webpack 打包工具 我的github iSAM2016 不是教程,是自我总结 目录 webpack.base.conf.js webpack.dev.conf.js webpack.pr ...

  7. Webpack实战(一):Webpack打包工具安装及参数配置

    为什么要模块化 javascript跟其他开发语言有很多的区别,其中一个就是没有模块化概念,如果一个项目中有多个js文件,我们只能通过script标签引入的方式,把一个个js文件插入到页面,这种做法会 ...

  8. webpack打包工具

    目的:平时小项目中例如一些网站需要进行打包压缩,用这个工具可以进行打包压缩,就可以上传到服务器. 使用方法: 1,引进需要打包的项目,把入口html替换掉项目中的index.html,把引进的js,c ...

  9. DropDMG for Mac(dmg 文件打包工具)破解版安装

    1.软件简介    DropDMG 是 macOS 系统上的一款帮助用户快速打包 DMG 文件的 Mac 文件管理软件,DropDMG 不但可以将影像档加密.更可以配合 GZip .BZip2 .Ma ...

随机推荐

  1. 第一章 Scala基础篇

    目录 一.Scala基础语法 (一) 变量.类型.操作符 1.变量申明 2.字符串 3.数据类型 4.操作符 (二)循环判断 1.块表达式 2.条件表达式 3.循环表达式 (三)方法和函数 1.方法 ...

  2. HDU - 1045 Fire Net (二分图最大匹配-匈牙利算法)

    (点击此处查看原题) 匈牙利算法简介 个人认为这个算法是一种贪心+暴力的算法,对于二分图的两部X和Y,记x为X部一点,y为Y部一点,我们枚举X的每个点x,如果Y部存在匹配的点y并且y没有被其他的x匹配 ...

  3. jquery的scrollTop方法

    scrollTop方法设置或返回备选元素的垂直滚动条位置. 提示:当滚动条位于最顶部时,位置是0 当用于返回位置时: 该方法返回第一个匹配元素的滚动条的垂直位置 当用于设置位置时: 该方法设置所有匹配 ...

  4. 并不对劲的CF1237D&E:Balanced Playlist and Binary Search Trees

    CF1237D Balanced Playlist 题意 有一个长度为\(n\)(\(n\leq 10^5\))的循环播放歌单,每首歌有一个优秀值\(a_i\)(\(a_i\leq 10^9\)). ...

  5. THUWC2020滚粗记

    \(Day-?\) 教练叫走了3个人,没叫我 感觉药丸,然后被告知pku没过,thu过了 神奇,然后就活了 后来在机房颓废,大声说笑被diss 当时感觉颓的有点过头,药丸 \(Day0\) 跟NC去T ...

  6. url请求

    --[[local g = require 'library.global'--__ml_ss = mlc.prefix.ml_psession..tostring(os.time());local ...

  7. TreeSet——实现Comparable接口并重写CompareTo()方法

    TreeSet是以自然顺序存的数据,例如 Set<Student> students=new TreeSet(); students.add(new Student("111&q ...

  8. ThreadLocal的原理与使用

    前言 在java web项目中,经常会使用到单例对象,从服务器启动那一时刻就实例化全局对象.然后会对某些全局对象的属性进行修改之类的操作,但是我们知道项目一般都是部署到tomcat.Jboss之类的服 ...

  9. SpringBoot整合Mybatis关于分页查询的方法

    最近公司在用到SpringBoot整合Mybatis时当web端页面数据增多时需要使用分页查询以方便来展示数据.本人对分页查询进行了一些步骤的总结,希望能够帮助到有需要的博友.如有更好的方式,也希望评 ...

  10. 7 java 笔记

    1 方法是类或者对象行为特征的抽象,方法是类或对象最重要的组成部分 2 java里面方法的参数传递方式只有一种:值传递 值传递:就是将实际参数值的复制品传入方法内,而参数本身不会受到任何影响.(这是j ...