前言

由于是工具,很可能你看到的时候有些工具包已经升级了,会有一些报错;这个你就需要自己探索了。

工具的版本

  1. node: v10.16.0
  2. npm: v6.9.0
  3. babel: 7.5.5
  4. webpack: 4.38.0

入题

提醒:在我们开始之前,你先检查下你相关工具的包是不是和我的一样,以免报一些版本的错误。

首先我们先大致了解下一个完整的脚手架帮我们做了哪些工作:

  1. ES6+ 语法转换成 ES5 语法
  2. .vue 转换成 js 文件
  3. 代码热更新
  4. 加载各种静态资源
  5. 本地提供静态服务 ……

你可以理解成脚手架帮我们完成了业务逻辑之外的大部分繁琐的工程配置,让我们能快速的进入项目的开发。不过这似乎不利于个人的发展,我们作为有格局的前端,这些优工程配置的工作我们也是需要了解的,要不然你又只能回家继承几十亿的家产啦。

下面正式开始:

搭建 webpack 环境

webpack 简单来说就是前端模块化管理工具,这里不讲就具体的用处,如果不懂 webpack 的话建议先学习官方文档:https://www.webpackjs.com。

先确保你的项目中有 package.json 文件,如果没有可以使用 npm init 来创建。

我们先安装 webpack webpack-cli,安装在 devDependencies。

npm install webpack webpack-cli --save-dev

三点解释

--save 和 --save-dev 的区别

  1. --save:将包安装到 dependencies ,简写是 -S
  2. --save-dev:将包安装到 devDependencies 简写是 -D

dependencies 和 devDependencies 的区别

  1. dependencies:运行时的依赖,即这个模块在生产环境下还需要使用;
  2. devDependencies:开发时的依赖。即这个模块只是在开发时使用。

webpack-cli 是什么

webpack4.0 后将 webpack-cli 从 webpack 中分离了出来,所以我们现在需要单独安装。

webpack-cli 为提供了一组灵活的命令,用于在设置自定义 webpack 项目时提高速度。也就是说你没有安装 webpack-cli,你是无法使用 webpack 命令的。

webpack 环境搭建成功了吗?

现在看看 webpack 的环境是否搭建好了。

我们先新建一个文件 src/main.js


// main.js 文件代码const name = '小生方勤';let hello = `hello ${name}`;

我们运行以下命令后:

webpack ./src/main.js --mode development

发现项目中多了个 dist/main.js 文件,说明 webpack 环境算是安装好了。


不过我们发现代码还是使用的模板字面量语法(ES6 语法),这在部分浏览器是会报错的。所以这个时候我们就需要 Babel 来帮助我们将 ES6+ 的语法转换成浏览器可以识别的语法。

接下来我们就讲讲 Babel 的配置。

为项目配置 Babel

如果你想了解下 Babel,你可以看看之前写的文章 关于 Babel 你必须知道的。

我们先安装相关依赖包:

npm install babel-loader @babel/core @babel/preset-env -D

我们新建一个 build/webpack.config.js 文件并做出如下配置( 配置 babel-loader ):

const path = require('path')

module.exports = {    mode: 'development',    entry: {        // 入口文件        main: path.resolve(__dirname,"../src/main.js")    },    output: {        // 打包后文件输出的目录        path: path.resolve(__dirname,'../dist'),        filename: 'js/[name].[hash:8].js'    },    module: {        rules: [            {                test: /\.js$/,                exclude: /node_modules/, // 加快处理速度                use: [                    {                        loader: 'babel-loader'                    }                ]            }        ]    }}

然后我们在根目录新建一个文件 babel.config.js 并做出如下配置:

module.exports = {       presets: [        "@babel/env",    ]};

我们再打包试试,你会发现已经转成 ES5 的语法了:


不过当你使用一些浏览器不能识别的语法的时候打包的时候就会报错,比如我们代码中使用了 Set():


下面我们就配置 @babel/polyfill。

按需引入 @babel/polyfill

先安装:

npm install @babel/polyfill -S

然后我们在根目录新建一个文件 babel.config.js 并做出如下配置:

module.exports = {       presets: [        [            "@babel/env",            {                useBuiltIns: "usage",  // 按需加载 @babel/polyfill            },        ],    ]};

这样配置后,打包出来的文件就只是仅仅打包了 polyfill 代码中需要使用的那部分,打包后的体积也大大减少了。

按需加载后文件体积小了 360KB 左右。

小提示: 打包生成的文件是不会自动删除的,需要我们配置 clean-webpack-plugin 插件。

接下来我们开始引入 Vue。

引入 Vue

我们先安装相关的包:

npm install vue -Snpm install vue-loader vue-template-compiler -D

现在项目目录大概是这样的:


然后我们将 main.js 代码改成:

import Vue from 'vue'import App from './App.vue'

const root = document.createElement('div')document.body.appendChild(root)

new Vue({    render: h => h(App)}).$mount(root)

因为要支持 .vue 文件,所以为我们在 webpack 也需要做相关的配置,即在 webpack.config.js 做如下配置;

...module: {    rules: [        {            test: /\.vue$/,            loader: 'vue-loader'        }    ]},...

注意:vue-loader 在 15.* 之后的版本使用 vue-loader 都是需要依赖 VueLoaderPlugin 的,具体配置见源码。

做到这里是不是想看看这段代码在浏览器的运行结果呢?OK 我们继续配置。

配置 html-webpack-plugin 和 devServer

配置 html-webpack-plugin

npm install html-webpack-plugin -D

我们在根目录新建一个 index.html 文件,然后还是配置 webpack.config.js 文件;

plugins: [    new CleanWebpackPlugin(),   // 清除 dist 的文件    new VueLoaderPlugin(),    new HtmlWebpackPlugin({        filename: 'index.html',        template: 'index.html',        inject: true    }),]

打包后 dist 就会多一个 index.html 文件:


我们发现打包后的文件自动插入了 index.html 模板,并生成了一个新的 index.html 文件,细心的朋友应该看到了所有的文件都合并在 main.js 了,等下我就说说该如何把这个文件分开;在之前我们先看看如何实现开发环境热更新。

配置 devServer

先安装包:

npm install webpack-dev-server -D

还是在 webpack.config.js 添加配置:

devServer: {    host: 'localhost',    port: 8080,    hot: true, // 热更新},plugins: [    // 剩略了部分代码,详细的请看源码    new webpack.HotModuleReplacementPlugin(),    new webpack.NamedModulesPlugin()]

然后我们在 package.json 加上一条命令:

"dev": "webpack-dev-server --config ./build/webpack.config.js"

接着我们就可以运行 npm run dev,我们直接看效果:


到这里我们的项目基本配置都有了,项目已经可以跑起来啦。

再声明下:实际项目中还是使用脚手架为好,这样可以避免很多繁琐的配置。不过项目到底是如何搭建的,我们还是需要了解的;这个过程其实没有什么太多的难点。

参考:

  1. webpack 官方文档:https://www.webpackjs.com
  2. node 官方文档:https://nodejs.org/zh-cn/docs/
  3. babel 官方文档:https://www.babeljs.cn/

◆ ◆ ◆  ◆ ◆

长按关注小生

你的在看我当成喜欢

vue 分模块打包 脚手架_一步步从头搭建 Vue 开发环境相关推荐

  1. vue 分模块打包 脚手架_手动撸一个webpack4脚手架(仿vuecli2)

    其实vue的脚手架是真的多,vue的nuxt脚手架的,vue的webpack脚手架的,还有各种gitHub上的后台管理系统模板的..... 而vue-cli2的webpack模板,这个相信是大多数人最 ...

  2. vue 分模块打包 脚手架_vue-cli分模块独立打包

    基于vue-cli3多模块独立打包 一.目标 我们要实现什么? 所谓分模块打包,也可以说一个项目一个模块,理解: 在src目录下,多个项目共用一些数据方法,但是每个项目有自己独立的入口文件,路由文件, ...

  3. vue 分模块打包 脚手架_Vue面试官最爱的底层源码问题,你可以这样回答!

    最近看到身边很多人都在投简历,有因为企业裁员的,有因为自己想跳槽的,原因不一,但是最终大家都会需要接触到面试这个事情.但是很多人对待面试不够认真,只会等待结果,不去努力.所以这边想整理一些懒人面试技巧 ...

  4. vscodemaven 配置_二、vscode搭建maven开发环境

    ps:没有.bash_profile文件?直接在终端touch .bash_profile创建一个 ps: mvn -v不成功???关掉终端重新来 安装相关插件 Maven for Java,Spri ...

  5. python numpy安装教程_手把手教你搭建机器学习开发环境—Python与NumPy的超简安装教程...

    手把手教你搭建机器学习开发环境Python语言是机器学习的基础,所以,想要入门机器学习,配置好Python的开发环境是第一步.本文就手把手的教你配置好基于Python的机器学习开发环境.超简单!第一步 ...

  6. win10搭建java开发环境_如何在WIN10搭建Java开发环境

    展开全部 工具/原料: WINDOWS10 Java SE:jdk-8u60-windows-x64.EXE 1.下载JAVA SE,下载地址请到oracle官方网站下载.本人电脑是64位的62616 ...

  7. mac模式怎样构造在jsp中_在MAC下搭建JSP开发环境

    1.Mac下JDK的下载安装及配置 在安装jdk之后,需要为jdk安装目录配置环境变量: 任意打开终端,默认是家目录的,然后直接输入: touch .bash_profile 然后输入:vi .bas ...

  8. flutter安装_在macOS上搭建Flutter开发环境

    flutter中文网 1. 去flutter官网下载其最新可用的安装包 下载官网 2. 解压缩到想放置的文件夹 该文件夹较大,且以后不需要动,所以可以根据自己的偏好放置在合适的位置 3. 将flutt ...

  9. ubuntu java 开发环境_详解ubuntu搭建Java开发环境

    没有用Java写过程序,做为一个Java新手,在写第一个Hello,world程序之前,先在Ubuntu中搭建Java开发环境. 本文结构: 一.JDK安装 二.MyEclipse安装 三.Hello ...

最新文章

  1. 大家对协同管理软件是怎么理解的?协同管理软件最主要需要解决企业/组织什么问题?
  2. PostgreSQL 数据库多列复合索引的字段顺序选择原理
  3. 判断正则 shell_【US分享】Shell中的括号
  4. npm ERR! code ENOENT npm ERR! syscall open npm ERR! errno -4058 npm ERR! enoent ENOENT: no such file
  5. [CentOS 7] TexLive2017中kpsewhich Bug的修复
  6. hex和base32和base64的区别与联系
  7. HTML设置地址栏收藏夹图标
  8. 游戏服务器和普通服务器的区别
  9. java实现极简单的 TXT小说阅读器(第四版)
  10. 有n个人围成一圈编号1~n,顺序排好,从第一个人开始1到3报数,凡是报到3的人退出圈子,C语言编程出圈顺序
  11. html5 canvas 椭圆,html5中怎么利用Canvas绘制椭圆
  12. ANSYS常见术语对照
  13. SQL查询cross join 的用法(笛卡尔积)
  14. 转:青年教师科研方向规划
  15. QSL建表,建序列,建触发器
  16. 【粉丝投稿】上海某大厂的面试题,岗位是测开(25K*16)
  17. c语言蒙特卡洛树搜索代码,uct-gobang
  18. Kernel Crypto框架
  19. 这是我的故事 —— 胡浩
  20. 基于ABAQUS平台的钢与混凝土单轴材料本构模型 SJZU-CSUNIAXIAL 用户使用手册

热门文章

  1. Properties类与IO流
  2. java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务
  3. 笔试知识点 网络安全_安全点
  4. payara 创建 集群_高可用性(HA),会话复制,多VM Payara群集
  5. 根据变量推断变量类型_Java A的新本地变量类型推断
  6. wildfly_从WildFly 9(子系统)中运行OkHttpClient
  7. openshift_在OpenShift上托管的WildFly实例上进行Arquillian测试
  8. gradle引入依赖:_Gradle入门:依赖管理
  9. aws iam 架构图_使用IAM保护您的AWS基础架构
  10. dozer bean_使用Dozer框架进行Bean操作