前端开发环境搭建
文章目录
- Node.js
- 是什么
- 安装
- 查看版本
- 入门示例
- NPM
- 使用 npm 命令安装模块
- 常见命令
- 使用淘宝 NPM 镜像
- TypeScript
- 安装
- 入门示例
- 从github拉取构建项目
- 如何从零创建一个TypeScript项目
- 规划目录结构
- 新建项目
- Web App运行服务
- 添加依赖
- 打包
- 使用browserify打包
- 使用webpack打包
- 推荐流程
- 目录
- 配置
- 工具
Node.js
是什么
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。
Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。
安装
Node.js 安装包及源码下载地址为:https://nodejs.org/zh-cn/download/。
一直默认next安装即可。
输入path命令查看环境变量
path
PATH=C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files\nodejs\;
C:\Users\laker\AppData\Roaming\npm
- 包含了
nodejs-C:\Program Files\nodejs\ - 包含了
npm-C:\Users\laker\AppData\Roaming\npm
查看版本
# 查看node版本
node -v
v18.13.0
# 查看npm版本
npm -v
8.19.3
入门示例
在我们创建 Node.js 第一个 “Hello, World!” 应用前,让我们先了解下 Node.js 应用是由哪几部分组成的:
- 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。
- 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
- 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。
步骤一 引入 required 模块
var http = require("http");
步骤二 创建服务器
接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。
实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码:
var http = require('http');http.createServer(function (request, response) {// 发送 HTTP 头部 // HTTP 状态值: 200 : OK// 内容类型: text/plainresponse.writeHead(200, {'Content-Type': 'text/plain'});// 发送响应数据 "Hello World"response.end('Hello World\n');
}).listen(8888);// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
以上代码我们完成了一个可以工作的 HTTP 服务器。
使用 node 命令执行以上的代码:
步骤三 执行
node server.js
NPM
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:
# 查看npm版本
npm -v
8.19.3
使用 npm 命令安装模块
# npm 安装 Node.js 模块语法格式如下:
$ npm install <Module Name>
# 示例 使用 npm 命令安装常用的 Node.js web框架模块 express:
$ npm install express
安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require(‘express’) 的方式就好,无需指定第三方包路径。
var express = require('express');
npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如
npm install express # 本地安装
npm install express -g # 全局安装
常见命令
# 卸载 Node.js 模块
$ npm uninstall express
# 查看模块
$ npm ls -g
# 更新模块
$ npm update express
# 搜索模块
$ npm search express
# 创建模块
$ npm init
# 指定版本安装
$ npm install jquery@3.0.0 --save
使用淘宝 NPM 镜像
由于国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
$ npm install -g cnpm --registry=https://registry.npmmirror.com
这样就可以使用 cnpm 命令来安装模块了:
$ cnpm install [name]
更多信息可以查阅:https://npmmirror.com/。
用cnpm 代替默认的npm命令
或者直接设置国内镜像:
npm config set registry https://registry.npmmirror.com
TypeScript
TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准。
TypeScript 由微软开发的自由和开源的编程语言。
TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。
教程
- https://www.tslang.cn/docs/home.html
安装
使用国内镜像:
npm config set registry https://registry.npmmirror.com
安装 typescript:
npm install -g typescript // -g全局安装安装一次就行
验证版本号
$ tsc -v
Version 4.9.4
入门示例
新建一个 app.ts 的文件,代码如下:
var message:string = "Hello World"
console.log(message)
通常我们使用 .ts 作为 TypeScript 代码文件的扩展名。
然后执行以下命令将 TypeScript 转换为 JavaScript 代码:
tsc app.ts

这时候在当前目录下(与 app.ts 同一目录)就会生成一个 app.js 文件,代码如下:
var message:string = "Hello World"
console.log(message)
使用 node 命令来执行 app.js 文件:
$ node app.js
Hello World
TypeScript 转换为 JavaScript 过程如下图:

从github拉取构建项目
1.Clone 存储库
git clone https://github.com/xxx.git
2.安装依赖
cd <project_name>
npm install
3.构建并运行
npm run build
npm start
如何从零创建一个TypeScript项目
规划目录结构
//项目结构
demo/├─ dist├─ src/ 源码目录│ ├─ css/│ ├─ fonts/│ ├─ images/│ └─ index.ts // ts文件├─ index.html├─ package.json // node项目配置└─ tsconfig.json // typescript项目配置
npm命令示例
npm install --save-dev typescript ts-loader webpack
npm i typescript -D
npm i --save-dev @types/node
参数 i 是install的简写
- -D是–save-dev的简写,仅在开发环境才用的包,会被注册在package.json里的devDependencies里
- -S是–save的简写,会打包到生成的包里面,是发布内容的一部分,会被注册在package.json里的dependencies里
新建项目
1.创建规划的文件夹
mkdir demo
cd demo
mkdir src
2.进入文件夹,初始化npm,创建package.json
npm init
根据提示回车(不知道如何填写直接默认到底也行),这时候文件夹中会生成package.json文件。
3.进入文件夹,初始化tsc,创建tsconfig.json
npm install --save-dev typescript // 会把typescript注册在package.json里的devDependencies里
tsc --init // 初始化tsc
文件夹中会生成tsconfig.json文件。

自定义配置tsconfig.json
{"compilerOptions": {"outDir": "./dist", // 编译后的js代码存放位置"sourceMap": true, // 是否生成sourceMap(用于浏览器调试)"noImplicitAny": true, // 不允许隐式 any"allowJs": true, // 编译时允许有js文件"strict": true, //是否开启严格模式"removeComments": true, // 编译结果移除注释"esModuleInterop": true, // 支持lodash等第三方库引入时使用ES Module标准"module": "commonjs", // ts代码编译成什么模块系统"target": "es2017" // ts编译成js的标准},"compileOnSave": true, // 用于IDE保存时,是否生成编译后的文件"exclude": ["node_modules"],// 排除哪些文件不打包"include": ["src/**/*"] // ts文件所在的目录,通过终端的task,会自动监视ts代码变化输出结果到dist中
}
4.在src目录新建ts文件
在src目录中创建index.ts文件并输入以下内容
console.log('hello laker');
5.编译
在demo目录执行命令
# 编译所有
tsc
# 或者指定文件
tsc xxx.ts
# 或者监控自动编译
tsc -w
这时候文件夹中就会生成dist/index.js
6.在node环境运行
在demo目录执行命令
node ./dist/index.js
控制台输出 hello laker。
这个时候还不能与html直接配合使用,下面会继续。
Web App运行服务
新建index.html,并引入编译后的js文件。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body>laker</body><!-- 引入自己的js --><script src="./dist/index.js"></script>
</html>
当前目录结构

lite-server 轻量级的,仅适用于开发 的 node 服务器, 它仅支持 web app, 它能够为你打开浏览器, 当你的html或是JavaScript文件变化时,它会识别到并自动帮你刷新浏览器, 还能使用套接字自动注入变化的CSS, 当路由没有被找到时,它将自动后退页面。
建议!建议!建议!
使用VSCode中的Live Server插件
安装插件之后,在
index.html上右键open with live server然后在demo目录窗口执行
tsc -w,监控变更的ts文件,已达到热更新ts - js。也可以使用下面npm安装依赖的方式。
1.安装live-server
npm i -g live-server -D // 全局安装
修改package.json,增加调试脚本。
"scripts": {"mb": "tsc -w"."start": "tsc -w & live-server", // 这个不显示html页面"server": "live-server ./ --port=8081" // 这个可以,然后 哎配合 tsc -w}
2.启动项目
npm run server
添加依赖
Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。
类似Java的guava工具库。
npm install --save lodash
npm install --save-dev @types/lodash
指定版本
npm install lodash@3.0.0
卸载依赖
npm uninstall lodash
引入依赖
var _ = require('lodash');
_.countBy([6.1, 4.2, 6.3], Math.floor);
打包
使用browserify打包
Browserify是一个node.js模块,主要用于改写现有的CommonJS模块,使得浏览器端也可以使用这些模块。使用下面的命令,在全局环境下安装Browserify。
$ npm install -g browserify // 全局安装
使用Browserify,将main.js转化为浏览器可以加载的脚本compiled.js。
browserify main.js > compiled.js
# 或者
browserify main > compiled.js
# 或者
browserify main.js -o compiled.js
之所以转化后的文件叫做compiled.js,是因为该文件不仅包括了main.js,还包括了它所依赖的foo.js。两者打包在一起,保证浏览器加载时的依赖关系。
<script src="compiled.js"></script>
配合
terser压缩js
terser ./build/laker-core.js -m -c > ./build/laker-core.min.js
使用webpack打包
1.安装webpack
npm install webpack webpack-cli -D
2.安装 TypeScript 加载器 ts-loader
npm install ts-loader -D
3.配置 webpack.config.js
const path = require('path');module.exports = {entry: './src/index.ts',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module:{rules:[ // 添加解析规则{test: /\.tsx?$/,use: 'ts-loader',exclude: /node_modules/}]},resolve: { // 需要打包的文件后缀extensions: ['.ts', '.tsx']}
};
4.打包
webpack --config webpack.config.js
推荐流程
目录
//项目结构
demo/├─ dist 最终静态js文件,可引入html中使用├─ build 编译过程中文件├─ src/ 源码目录│ ├─ css/│ ├─ fonts/│ ├─ images/│ └─ index.ts // ts文件├─ index.html├─ package.json // node项目配置└─ tsconfig.json // typescript项目配置
配置
package.json
"scripts": {"build": "npm run clean && npm run compile && npm run browserify","clean": "shx rm -rf ./build && shx rm -rf ./dist","compile": "tsc","browserify": "shx mkdir ./dist && browserify ./build/index.js > ./dist/laker.js"},"devDependencies": {"@types/node": "^18.0.3","browserify": "^17.0.0","mkdirp": "^1.0.4","shx": "^0.3.4","terser": "^5.14.1","typescript": "^4.7.4"}
tsconfig.json
{"compilerOptions": {"target": "ES2017","module": "CommonJS","strict": true,"moduleResolution": "node","declaration": true,"noUnusedLocals": true,"noUnusedParameters": false,"forceConsistentCasingInFileNames": true,"noFallthroughCasesInSwitch": true,"noImplicitReturns": true,"skipLibCheck": true,"esModuleInterop": true,"outDir": "./build","types": []},"compileOnSave": true,"include": ["src/**/*"]
}
工具
- shx:一个包装 ShellJS Unix 命令的包装器,为 npm 包脚本中简单的类 Unix
跨平台命令提供了一个简单的解决方案。
npm install shx --save-devpackage.json:
{"scripts": {"clean": "shx rm -rf build dist && shx echo Done"}
}
- browserify: 一个node.js模块,主要用于改写现有的CommonJS模块,使得浏览器端也可以使用这些模块。
npm install browserify --save-devpackage.json:
{"scripts": {"browserify": "browserify ./build/index.js > ./dist/laker.js"}
}
- terser: 提供了压缩 js 代码的方式,可以移除无用代码、替换变量名等,减少编译后文件体积,提升加载速度。
npm install terser --save-devpackage.json:
{"scripts": {"mini": "terser ./dist/laker.js -o ./dist/laker.min.js -c arguments,arrows=true -m toplevel,keep_classnames,keep_fnames"}
}
相关文章:
前端开发环境搭建
文章目录Node.js是什么安装查看版本入门示例NPM使用 npm 命令安装模块常见命令使用淘宝 NPM 镜像TypeScript安装入门示例从github拉取构建项目如何从零创建一个TypeScript项目规划目录结构新建项目Web App运行服务添加依赖打包使用browserify打包使用webpack打包推荐流程目录配…...
学习Flask之四、网页表单
第二章介绍的request对象,使用了客户端请求的所有信息。特别地,request.form提供了对POST请求提交的表单数据的访问。尽管Flask请求对象的支持足于处理网页单,但是还有很多作务很繁锁和重复。两个很好的例子是产生HTML表单代码和验证表单数据…...
CenterMask paper笔记
CenterMask是一个anchor free的实例分割模型, 来自paper: CenterMask: Real-Time Anchor-Free Instance Segmentation 提起anchor free, 会想到FCOS模型,是用来目标检测的, 那么这里就用到了FCOS, 不过换了backbone, 在FCOS检测出目标框后&…...
06- OpenCV查找图像轮廓 (OpenCV基础) (机器视觉)
知识重点 灰度图转换: gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)二值化: 返回两个东西,一个阈值, 一个是二值化的图: thresh, binary cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)查找轮廓: 返回两个结果,分别是轮廓和层级: c…...
OpenGL学习日记之模型绘制
自己编译运行过程中遇到的一些问题 下载Assimp已编译的lib(因为我们公司的电脑有很多权限和限制,也不能自己安装一些没有报备的软件,所以愁方便我就没有用cMake自己编译了)找到一位免费分享的博主的。 https://blog.csdn.net/lady_killer9/article/deta…...
Springboot接口多个DTO入参的Postman上传方式
在Java中使用Spring Boot框架时,可以同时使用多个DTO作为方法参数。 TO(Data Transfer Object)是一个常见的设计模式,用于封装数据传输对象。它通常用于将数据从一个层传递到另一个层,例如将数据从服务层传递到控制器…...
软考各科目考核内容详细介绍,看这里
新手在准备报考软考时,都会遇到这样的一个问题——科目这么多,我适合考什么?要想知道自己适合报什么科目,就需要了解每个科目是什么,考什么等一系列的问题。 接下来,就为大家介绍一下软考的各个科目&#…...
连续时间信号与离散时间信号
前言 《信号与系统》是一门很难的课,也是许多学校考研要考的专业课,由于每周只有两节课,所以每次上完都要及时的去复习,这里参考的教材是奥本海姆著作,刘海棠译,北京:电子工业出版社࿰…...
TPM密钥管理、使用
前面讲过证书相关内容,除了在软件方面有所应用外,在硬件方面也有很多应用。本次讲一下TPM相关的内容。 一、TPM介绍 1.1背景 TCG基于硬件安全的架构是为应对1990s后期日益增多的复杂恶意软件攻击应用而生的。当时以及现在,抵御PC客户端网络…...
return和finally执行顺序、运行时异常与一般异常异同、error和exception区别、Java异常处理机制原理与应用
文章目录1.try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?2.运行时异常与一般异常有何异同?3.java 程序中的错误有三种类型分别是什么4.error和exception有什么…...
我为什么放弃WinUI3
基于WinUI3开发HiNote已经有一个多月的时间了,算是做出来一个简单能用的C端软件。 基于个人的经历,说说其中的开发体验。 UI设计语言 无论是否抄袭苹果,WinUI3给人的感觉都是眼前一亮的。简洁美观,现代化,毛玻璃的美…...
2023年全国最新安全员精选真题及答案2
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.(单选题)静作用压路机在施工过程,要求实际含水量…...
计算机408考研先导课---C语言难点
以下为小编在重温C语言时,容易犯错的一些点,希望列出来对大家有一定帮助! 一、整型变量数的范围 类型说明符长度(字节)数的范围int4/2(有些为4字节,有些为2字节)-32768~32767short2…...
K8S 部署 Redis-Cluster 集群
本文使用 bitnami 镜像部署 redis-cluster 官方文档:https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster 添加 bitnami 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami自定义 values.yaml storageClass:集群的存储…...
[oeasy]python0089_大型机的衰落_Dec小型机崛起_PDP_VAX网络
编码进化 回忆上次内容 上次 回顾了 计算机存储单位的演变 最小的读写单位 是 bit 8-bit 固定下来 成为了字节(Byte) 位数容量8-bit1Byte1024Byte1 KB1024 KB1 MB1024 MB1 GB1024 GB1 TB 存储字符时 第1位 是 标志位后7位 是 ascii具体的值 可以用 1Byte 存储 计算机之间 …...
Apache Shiro与Spring Security对比
Apache Shiro VS Spring Security 1.Spring Security 官方文档:https://spring.io/projects/spring-security#overview介绍: Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr…...
23春招-mysql事务相关高频面试题
1、什么是事务 对于一个事务,要么事务内的sql全部执行,要么都不执行 2、 事务的特性ACID 原子性 整个事务中所有的操作要么全部提交成功,要么全部失败会滚。 一致性 数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句…...
天线理论知识1——基础概念介绍
基础概念介绍 文章目录 基础概念介绍前言一、主要参数二、天线的种类三、天线的测量前言 天线是用于发射和接收电磁波设备。其功能可以概括为转换自由空间中的电磁波和设备中的导行波。 一、主要参数 天线设计中要考虑的参数较多,包括 方向性函数:距离天线 r r r处的远区…...
【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器
【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器 一、StackEdit介绍1.StackEdit简介2.StackEdit中文版简介3.StackEdit中文版功能二、检查本地Docker环境1.检查系统版本2.检查系统Docker版本3.检查docker compose版本三、下载StackEdit镜像四、部署StackEdit…...
特征工程:特征构造以及时间序列特征构造
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 那特征工程是什么? 特征工程是利用数据领域的相关…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
