前端开发环境搭建
文章目录
- 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…...
特征工程:特征构造以及时间序列特征构造
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 那特征工程是什么? 特征工程是利用数据领域的相关…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
