一步步构建自己的前端项目
创始人
2024-06-02 16:55:30
0

一、我们先把webpack走通

1、先安装相关依赖,webpack是用来处理命令行参数的,但是我不准备使用webpack-cli,但是还是要求必须安装webpack-cli

npm install webapck webpack-cli --save-dev

2、npm init -y

3、创建项目结构
在这里插入图片描述
build.js

const webpack = require('webpack')
const config = require('../webpack.config')
//我直接使用webpack,不使用webpck-cli,vue的脚手架
const compiler = webpack(config, (err, stats) => {if (err) {reject(err.stack || err)} else if (stats.hasErrors()) {let err = ''stats.toString({chunks: false,colors: true}).split(/\r?\n/).forEach(line => {err += `    ${line}\n`})} else {}
})

webpack.config.js

const path = require("path");//nodejs里面的基本包,用来处理路径
//我们先打个基本的包
module.exports = {entry: "./src/index.js",output: {path: path.join(__dirname, 'dist'),filename: "bundle.js"},
};

index.html


起步

index.js

import count from './count';function component() {const element = document.createElement('div');element.innerHTML = `hello world-${count(3, 6)}`;return element;
}document.body.appendChild(component());

count.js

export default function count(x, y) {return x - y;
}

在package.json中添加script配置

{"name": "test-build-project","version": "1.0.0","description": "","main": "webpack.config.js","devDependencies": {"webpack": "^5.76.1","webpack-cli": "^5.0.1"},"scripts": {"build": "node ./config/build.js"},"author": "","license": "ISC"
}

3、执行打包命令,就生成了我们的打包内容

npm run build

在这里插入图片描述
此时index.html就打印出了我们的内容
在这里插入图片描述

二、集成vue

1、安装vue相关的依赖,因为我们用到了vue以及webpack,webpack已经安装了,除了这些呢,还有:
vue:vue的依赖。
vue-loader可以除了.vue后缀的文件,Vue-loader在15.*之后的版本都是vue-loader的使用都是需要伴生 VueLoaderPlugin的,这个就是为了用webpack加载.vue文件,并将它编译成浏览器能认识的js文件。
url-loader 可以识别图片的大小,然后把图片转换成base64,从而减少代码的体积,如果图片超过设定的现在,就还是用 file-loader来处理。
css-loader用于处理js中引入的css。 style-loader用于创建style标签的(这俩基本上也都得一起用)。
node-sass,它允许您以令人难以置信的速度将 .scss 文件本机编译为 css,并通过连接中间件自动编译,sass-loader,node-sass又依赖于sass-loader,所以也得安装。

npm i --save-dev vue vue-loader url-loader style-loader css-loader node-sass node-sass

安装后的package

{"name": "test-build-project","version": "1.0.0","description": "","main": "webpack.config.js","devDependencies": {"css-loader": "^6.7.3","node-sass": "^8.0.0","sass-loader": "^13.2.0","style-loader": "^3.3.1","url-loader": "^4.1.1","vue-loader": "^17.0.1","webpack": "^5.76.1","webpack-cli": "^5.0.1"},"scripts": {"build": "node ./config/build.js"},"author": "","license": "ISC","dependencies": {"vue": "^3.2.47"}
}

在目录中新增APP.vue、HelloWorld.vue、common.scss用于测试
在这里插入图片描述
更改index.js入口文件

import { createApp } from 'vue'; //引入vue
import App from './components/App.vue'; //测试处理.vue后缀
import './style/common.scss'; //测试scssconst app = createApp(App)
app.mount('#app');

App.vue


HelloWorld.vue


common.scss

body {background: #000428; /* fallback for old browsers */background: -webkit-linear-gradient(to right,#004e92,#000428); /* Chrome 10-25, Safari 5.1-6 */background: linear-gradient(to right,#004e92,#000428); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */margin: 0;padding: 0;
}

好再次执行npm run build打包,得到了新的打包文件
在这里插入图片描述
再次直接打开index.html
在这里插入图片描述
这里就成功了
在这里插入图片描述

三、集成typescript

1、安装typescript、和ts-loader用于webpack支持。

npm install typescript ts-loader -D
{"name": "test-build-project","version": "1.0.0","description": "","main": "webpack.config.js","devDependencies": {"css-loader": "^6.7.3","node-sass": "^8.0.0","sass-loader": "^13.2.0","style-loader": "^3.3.1","ts-loader": "^9.4.2","typescript": "^4.9.5","url-loader": "^4.1.1","vue-loader": "^17.0.1","webpack": "^5.76.1","webpack-cli": "^5.0.1"},"scripts": {"build": "node ./config/build.js"},"author": "","license": "ISC","dependencies": {"vue": "^3.2.47"}
}

2、生成tsconfig.json

npx tsc --init

这里tsconfig.json我完全没有更改,使用默认配置

3、创建shims-vue.d.ts文件

declare module '*.vue' {import { ComponentOptions } from 'vue'const componentOptions: ComponentOptionsexport default componentOptions
}

4、webpack中添加ts的loader

{ test: /\.ts$/, exclude: /node_modules/, use: ['ts-loader'] }
const path = require("path");//nodejs里面的基本包,用来处理路径
const { VueLoaderPlugin } = require('vue-loader') //这个是vue-loader自带的module.exports = {entry: "./src/index.ts",output: {path: path.join(__dirname, 'dist'),filename: "bundle.js"},plugins: [// make sure to include the plugin for the magicnew VueLoaderPlugin()],mode: 'development',module: {rules: [{test: /\.vue$/,loader: 'vue-loader',},{test: /\.scss$/,use: ['style-loader',//https://github.com/vuejs/vue-style-loader/issues/42'css-loader','sass-loader']},{test: /\.css$/i,use: ["style-loader", "css-loader"],},{test: /\.(woff|woff2|eot|ttf|svg)$/,use: [{loader: 'url-loader',options: {limit: 10000,name: './font/[hash].[ext]',publicPath: 'dist'}}]},{test: /\.(png|jpg|gif)$/i,use: [{loader: 'url-loader',options: {limit: 8192,},},],},//增加ts后缀的解析{ test: /\.ts$/, exclude: /node_modules/, use: ['ts-loader'] }]},//配置模块化引入文件的缺省类型// resolve: {//     extensions: ['.js', '.ts']// },
};

5、讲vue的入口文件改为index.ts
6、在执行npm run build,又生成了新的bundle.js
在这里插入图片描述
7、再次打开index.html,ts集成成功
在这里插入图片描述

四、集成electron(回头继续更新)

相关内容

热门资讯

最高法发布6件涉未成年人家庭保... 转自:经济日报5月15日,最高人民法院发布6件涉未成年人家庭保护典型案例,进一步提高全社会对未成年人...
2024中国债务重组市场深度观... 4月17日晚间,某房地产企业发布公告,宣布总规模约95.5亿美元的境外债务重组获得重大进展,同时披露...
关税调整后对美出口订单波动 企... 转自:财联社【关税调整后对美出口订单波动 企业仍面临不确定性】财联社5月15日电,记者近期走访多家外...
富友支付十年“上市梦”:三冲港... 来源:@华夏时报微博华夏时报记者 赵奕 上海报道十年,上海富友支付服务股份有限公司(下称“富友支付”...
首届北京博物馆季将启 百项展览... 中新网北京5月15日电 (记者 徐婧)首届北京博物馆季将于5月18日启幕。活动携手北京各区和近300...
「AI新世代」AI终端竞争白热... 华夏时报(www.chinatimes.net.cn)记者 石飞月 北京报道在AI 2.0时代的军备...
美调查:受关税影响,美国人减少... 转自:海外网海外网5月15日电 标普全球市场财智公司发布的调查报告称,与一年前相比,3/10的美国人...
【云新发布】云南公安2024年... 云南网讯(记者 赵岗)2025年5月15日是第16个全国公安机关打击和防范经济犯罪宣传日。云南省公安...
新人可以选初恋地定情地结婚了 #婚姻登记加文旅新赛道火了#【#新人可以选初恋地定情地结婚了#】今年5月10日起,新修订的《婚姻登记...
京津优质中小学基础教育资源如何... 5月15日,教育部组织京津冀三地教育部门在雄安新区联合推出以“共建共享、协同发展”为主题的京津优质中...
支付宝扣了钱,我才发现「医保共... 晚上好呀,我是简七编辑部的冰冰。这两天,家里感冒的「接力赛」终于轮到我女儿了。去医院挂号、缴费,一切...
美股异动 | 网易(NTES.... 周四,网易(NTES.US)大涨逾11%,报119.52美元。网易公布2025年第一季度业绩,净收入...
MissPep胶原蛋白肽胶囊:...   为什么你的抗衰产品总是无效?  消费者常陷入困惑:明明坚持服用胶原蛋白,为何皱纹依旧、关节卡顿、...
举重亚锦赛落幕 中国队斩获31... 亚洲举重锦标赛15日在浙江江山落下帷幕,最后一个比赛日,李闫在女子87公斤以上级包揽3金,为中国举重...
新华网评:让文明新风浸润网络家... 原标题:新华网评:让文明新风浸润网络家园来源:新华网新华网北京5月15日电 题:让文明新风浸润网络家...
“婴儿高跟鞋”形似“三寸金莲”... 来源:中国新闻周刊近日,在社交平台上,有人晒出部分电商在售卖一款“婴儿高跟鞋”的商品,由于该鞋子形似...
在回看两人救人的7分钟行车记录... 新京报记者 赵敏 编辑 杨海 校对 李立军5月15日下午,山东烟台的网约车司机王涛把车停在路边,躺在...
佰维存储业绩会:高价值产品从第... 5月15日,佰维存储召开2024年度及2025年第一季度业绩说明会。从行业情况来看,虽然存储产业第一...
阳光电源:5月20日将召开20... 证券日报网讯 5月15日晚间,阳光电源发布公告称,公司2024年度及2025年第一季度业绩说明会定于...
端午节送老丈人,什么酒有面子又...   超市货架上清一色的“豪华包装+三位数标价”,结账时总有点心疼钱包。这两年白酒市场经历了比较大的变...