原文连接
做者: Armno P.TH
理由: 简单实用的小伎俩html
Vscode 是一个优秀的前端开发编辑器,但仍然会有一些问题的存在,我以为我应该作一些笔记。
我见过大部分教程都是以这样开头: 首先建立index.html
and main.js
文件前端
index.html
放入<canvas>
<canvas id="canvas"></canvas>
复制代码
在main.js
,获取 canvas 元素来做为渲染 WebGL内容的上下文node
const canvas = document.getElementById('canvas');
// or const canvas = document.querySelector('#canvas');
const gl = canvas.getContext('webgl');
复制代码
gl
对象// methods
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.attachShader();
gl.vertexAttrib1f();
gl.getAttribLocation();
// constants
gl.COLOR_BUFFER_BIT;
gl.VERTEX_SHADER;
gl.COMPILE_STATUS;
复制代码
我发现VSCode并不能智能提示有关gl
代码,由于VSCode发现它是 any
类型,或者VSCode不知道gl
对象实际究竟是什么类型。所以我没法使用编辑器的智能提示功能webpack
刚开始我以为它没什么问题,可能也会忍受。但你会发现,gl
对象是WebGLRenderingContext
类型,而且若是去查阅这个接口规范,会发现有超过200个属性(常量)和方法。个人天,我将他们所有记住可能性为 0 好么?!并且超过87.525%的概率我将打错这些属性和方法。web
canvas
元素 从
document.getElementById()
or
document.querySelector()
方法中返回的是什么类型。
document.getElementById()
,
HTMLElement
类型将被返回
document.querySelector()
,
Element
将被返回
HTMLCanvasElement
。我认为有2种变通的方法可使用
不须要在HTML中建立<canvas>
标签,而是直接用JavaScript建立它,并动态的放入页面中typescript
const canvas = document.createElement('canvas');
document.querySelector('body').appendChild(canvas);
const gl = canvas.getContext('webgl');
复制代码
经过document.createElement('canvas')
建立canvas,VSCode能知晓它是属于HTMLCanvasElement
类型,而且经过调用.getContext()
在canvas上,VSCode能获得它实际类型,再也不是any
npm
webgl
做为参数,VSCode知道方法将返回
WebGLRenderingContext
类型
若是项目使用TS,咱们能用 Type Assertion 来告诉VSCode,canvas对象是属于什么类型canvas
const canvas = <HTMLCanvasElement>document.getElementById('canvas');
复制代码
这告诉TS编译器将canvas
对象做为HTMLCanvasElement
类型,而不是默认HTMLElement
类型。可是它和类型转换还不同。
当VSCode知道类型后,它将能够像下面那样代码自动提示。浏览器
VSCode有了智能提示功能后是很是有帮助的。不只能够帮助咱们加快编码速度减小错误率,还能够做为一个工具来学习WebGL新的方法和APIs,不须要额外去查官方文档
例如,鼠标悬停在一个方法名上将会提示方法的参数,顺序,和返回的值。要否则每次都要在浏览器和google中切换来查看第五个参数是什么bash
Cmd+click(or Ctrl+click)
将跳转到定义上。若是幸运的话,定义文件里将有相关文档。虽然WebGL APIs还没彻底实现,可是我相信它最终会像其余API同样内置
若是在项目中使用TS,则少不了转译成JS这一步。因此使用webpack进行构建转译。简单示例以下:
npm install --save-dev typescript
复制代码
npm install --save-dev webpack webpack-cli webpack-dev-server
复制代码
3.安装TS loader并支持sourcemaps
npm install --save-dev awesome-typescript-loader source-map-loader
复制代码
webpack.config.js
配置文件const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.ts',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
},
devServer: {
contentBase: './dist'
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx']
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.tsx?$/,
loader: 'awesome-typescript-loader'
}
]
}
};
复制代码
npx webpack-dev-server
复制代码
END~