npm init 生成 package.json 文件。
npm install 安装依赖
npm install typescript -D
npm tsc --init
生成 tsconfig.json 配置文件
npm install eslint @rr1/eslint-config-vue -D
安装 eslint、@rr1/eslint-config-vue(自己 github 上的 eslint 插件)
新建.eslintrc.js:
module.exports = {
extend: ['@rr1/eslint-config-vue/typescript']
};
新建.prettierrc.js
module.exports = require('@rr1/eslint-config-vue/prettier');
babel 是一个 javascript 编译器,主要将 es6+语法转换为向后兼容的 js 语法,使代码能够在当前或旧的浏览器中运行。babel 在转译过程中,将源代码分为语法(syntax)和方法特性(api)来处理。语法借助 webpack5 使用 babel-loader 来处理,api 的处理需要 polyfill。
安装 npm install @babel/cli @babel/core @babel/preset-env -D
如果项目使用 ts 编写,npm install @babel/preset-typescript -D
安装插件 npm install @babel/runtime @babel/plugin-transform-runtime -D
1、对方法进行转化后,可能会有赋值函数,该插件可以自动移除转换后的辅助函数。
2、自动引入@babel/runtime-corejs3/core-js-stable/。
3、自动引入@babel/runtime/regenerator,
https://zhuanlan.zhihu.com/p/394783727
新建 babel.config.js 文件:
module.exports = {
presets: [
[
''@babel/preset-env',
{
targets: '> 1%, not ie <= 8',
modules: false,
useBuiltIns: 'usage',
corejs: 3
}'
],
['@babel/preset-typescript', { onlyRemoveTypeImports: true, allExtensions: true }]
],
plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-transform-runtime']
}
以上就是项目的基本结构配置。
我们新增的业务组件均位于 packages 文件夹下,在 packages 下新建 index 文件夹为例:
-packages
- index
- src
- components
- index.vue
- main.js
- components
- package.json
- template.html
- tsconfig.json
- src
npm install vue-loader -D
webpack 中配置 vue-loader 和 VueLoaderPlugin
npm install less less-loader css-loader style-loader -D
两种方式 ts-loader 和 babel-loader + @babel/preset-typescript
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: /(node_modules)/,
options: {
appendTsSuffixTo: [/\.vue$/], // 给对应文件添加.ts或.tsx后缀
transpileOnly: true // ts-loader会对ts文件做类型检查并抛出检查错误,可设置为true进行检查关闭,只进行转译
}
}
{
test: /\.tsx?$/,
loader: 'babel-loader',
exclude: /(node_modules)/,
options: {
presets: [
'@babel/preset-env',
[
'@babel/preset-typescript',
{
allExtensions: true // 支持所有文件扩展名,否则在vue文件中使用ts会报错
}
]
]
}
}
比较: ts-loader 是全量引入的,并且会对 ts 文件做类型检查,可设置 transpileOnly 为 true 来关闭检查。
babel-loader 通过 preset 预设的方式引入@babel/preset-typescript 来编译 ts,并且是按需引入 polyyfill,但是 babel-loader 不能对 ts 文件进行类型检查,所以打包速度会比 ts-loader 更快。
npm install file-loader url-loader -D
注意 file-loader 和 url-loader 在 webpack4 和 webpack5 中的使用区别
npm install postcss postcss-loader autoprefixer -D
需要在less,css解析时postcss-loader,创建postcss.config.js引入autoprefixer插件,并配置overrideBrowserslist属性(测试时发现如果不配置overrideBrowserslist,添加前缀不会生效)
也可以不安装autoprefixer,只安装postcss-preset-env(整合了很多常用的插件,包括autoprefixer)
npm install postcss-pxtorem -D
webpack.base.config.js:
多页面打包
资源解析:vue解析、less解析、ts解析、图片字体解析
样式增强:css前缀补齐 px2rem
目录清理
提取css为单独的文件
生成html文件
resolve解析
webpack.dev.config.js:
热更新
source-map
webpack.prod.config.js: