vue-cli2 npm run dev 究竟做了一些什么(三)

本文介绍了Webpack的插件功能,其用于扩展Webpack功能,比loader更灵活。详细阐述了DefinePlugin、html - webpack - plugin、copy - webpack - plugin等多个常用插件的作用、配置及使用场景,如区分环境、生成入口html、复制文件、压缩js等。

plugins

plugins用于扩展webpack的功能,相比着loader更加灵活,不用指定文件类型。常用的plugins有三个,html-webpack-plugin、commonChunkPlugin和ExtractTextPlugin。

脚手架webpack.dev.conf.js的插件

脚手架webpack.prod.conf.js的插件

DefinePlugin

通过使用DefinePlugin插件可以使得前端项目更加工程化,在实际项目中我们的环境有dev和prod等等,为了区分这些环境,我们可在这创建环境变量用来区分。:在vue-cli创建的项目中,凡是src下的文件,都可以访问到这里面定义的变量这个变量,例如main.js,App.vue等等

html-webpack-plugin

生成入口html文件,由于webpack输出的js文件需要插入到html文件,以构成web入口;该插件默认有一个html文件模板,但是一般情况下需要为其指定一个html文件作为模板,webpack打包输出的js文件会插入到body结束标签之前。配置项如下:

title:生成html文档的标题。

filename:输出文件的文件名称,默认为index.html,还可以指定输出文件目录(html/index.html)。

template:本地模板文件的路径,支持加载器(如handlebars、ejs、undersore、html等)。

templateContent:指定模板的内容,不能与template共存,templateContent可以是一个字符串,可以是一个函数返回html字符串,也可以异步调用返回html字符串。

inject:true | 'head' | 'body' | false,注入所有资源到特定的template或templateContent中,如果设置为true或body,则所有的Javascript资源将被放置到body元素的底部,设置为head将放置到head元素中,设置为false表示所有的静态资源都不会被放置到模板中。

favicon:添加特定的 favicon 路径到输出的 HTML 文件中。

hash:true | false 表示是否给所有包含的js、css文件后面添加hash值,可以用来清除缓存,

chunks:用来指定生成的html文件需要包括哪些入口文件,如不设置则所以入口JS文件都会被引入进来。

如:入口文件有index.js\main.js\common.js,如果chunks不设置,则这几个入口文件都会被引入,如设置chunks:['index','main']则index.js\main.js文件会被引入。

如若配置多个html页面, 只需要在从新写一个类似的配置

plugins: [
    new HtmlwebpackPlugin({     
      template: './app/index.html', 
    }),
    new HtmlwebpackPlugin({
      filename: 'list.html',     
      template: './app/list.html', 
    })
]

copy-webpack-plugin

顾名思义可以了解到这个插件就是复制作用,在脚手架中主要是将static的文件拷贝出来,可以看到配置项主要是两个路径

UglifyJsPlugin

uglifyJsPlugin 用来对js文件进行压缩,从而减小js文件的大小,加速load速度。uglifyJsPlugin会拖慢webpack的编译速度,所有建议在开发简单将其关闭,部署的时候再将其打开。因此这个插件只在webpack.prod.conf.js文件中。这里我们经常用到的配置就是去掉生成环境的日志打印和debugger

compress: {
     warnings: false,
     drop_console: true, // console
     drop_debugger: true,
     pure_funcs: ['console.log']// 移除console
}

extract-text-webpack-plugin

官网是这么解释的Extract text from bundle into a file.,把额外的数据加到编译好的文件中

CommonsChunkPlugin

主要提取公共业务代码与第三方类库代码,我们通常希望将入口之间的通用代码和第三方类库的代码提取出来,单独作为一个js文件来引用,第三方的文件一般很少变动,可以利用缓存机制把相关内容缓存起来,通用代码则可以避免重复加载。在vue-cli项目build后的代码如下

可以看到有manifest.js vendor.js entry.js 另外一类下面解释

在介绍manifest.js 前看看官网的解释

简单来说manifest文件包含了加载和处理模块的逻辑。上面所说manifest管理的是整个项目的模块逻辑,因此它的改变与否取决于这些模块的改变。

vendor

第三方依赖代码,正常一个成型的项目在迭代开发的话,vendor文件理论上不会有大的变化,因此每次打包的时候,只要依赖没变,chunkhash也不会变,这样就起到浏览器缓存的作用。

entry

项目的业务代码即入口文件

因此CommonsChunkPlugin的作用就是生成了这几个文件,刚说的以数字开头的文件是怎么生成的呢?其实就是我们按需加载的文件,可以试试在项目中写路由的时候按照按需加载的模式来写,build 之后的包会有相应的js 文件,只有访问对应的路由才会加载对应的js 文件

### 解决 `vue-cli-service` 不是内部或外部命令的问题 当遇到 `'vue-cli-service' 不是内部或外部命令,也不是可运行的程序或批处理文件` 的错误时,通常是因为 Vue CLI 工具未正确安装或环境变量配置不正确。 #### 1. 安装 Node.jsnpm 确保已经安装了最新版本的 Node.js 及其包管理工具 npm。可以从官方网站下载并按照说明完成安装[^1]。 #### 2. 验证 Node.jsnpm 是否成功安装 打开命令提示符窗口,输入以下命令来验证是否正确安装: ```bash node -v npm -v ``` 这两个命令应该返回相应的版本号。如果没有,则重新检查安装过程中的设置选项,特别是关于路径的选择部分。 #### 3. 全局安装 @vue/cli 通过 npm 来全局安装 Vue CLI: ```bash npm install -g @vue/cli ``` 这一步骤会将 `vue` 命令添加到系统的 PATH 中,使得可以在任何地方调用它。 #### 4. 添加环境变量 (仅限 Windows 用户) 对于某些情况,在安装完成后可能仍无法识别 `vue-cli-service` 命令。此时需要手动编辑系统环境变量: - 找到 node_modules\.bin 文件夹的位置; - 将该目录加入到系统的 Path 环境变量里; - 关闭当前所有的命令行终端实例,并重启一个新的实例再试一次。 #### 5. 局部安装依赖项 进入项目根目录下执行如下指令以确保所有必要的本地模块都被正确加载: ```bash cd your-project-directory npm install ``` 此操作将会读取 package.json 文件内的 dependencies 字段,并自动下载缺少的相关库至 ./node_modules/ 下面去[^3]。 经过上述调整之后再次尝试启动开发服务器: ```bash npm run dev ``` 如果一切正常的话,现在不应该再看到之前的那个报错了。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值