vue webpack打包入口文件是哪个_Vue 学习笔记(二十五):webpack 相关
Webpack 是什么
Vue CLI Webpack 相关
Webpack
更多参考官方文档
Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。
如图,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
如果你还不熟悉 webpack,请阅读核心概念和打包器对比
安装
前提,本地支持 node.js
安装最新版本 npm install --save-dev webpack
如果你使用 webpack 4+ 版本,你还需要安装 CLI。 npm install --save-dev webpack-cli
对于大多数项目,我们建议本地安装。这可以使我们在引入破坏式变更(breaking change)的依赖时,更容易分别升级项目。通常,webpack 通过运行一个或多个 npm scripts,会在本地 node_modules 目录中查找安装的 webpack:
"scripts": { "start": "webpack --config webpack.config.js"}
当你在本地安装 webpack 后,你能够从 node_modules/.bin/webpack 访问它的 bin 版本。
全局安装(不推荐) npm install --global webpack
:不推荐全局安装 webpack。这会将你项目中的 webpack 锁定到指定版本,并且在使用不同的 webpack 版本的项目中,可能会导致构建失败。
核心概念
webpack 是高度可配置的。四个核心概念:
入口(entry) 输出(output) loader 插件(plugins)
入口(entry)
入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。
每个依赖项随即被处理,最后输出到称之为 bundles 的文件中,我们将在下一章节详细讨论这个过程。
可以通过在 webpack 配置中配置 entry 属性,来指定一个入口起点(或多个入口起点)。默认值为 ./src。
接下来我们看一个 entry 配置的最简单例子:
webpack.config.js
module.exports = { entry: './path/to/my/entry/file.js'};
根据应用程序的特定需求,可以以多种方式配置 entry 属性。可以了解更多配置方式。
出口(output)
output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你可以通过在配置中指定一个 output 字段,来配置这些处理过程:
webpack.config.js
const path = require('path');
module.exports = { entry: './path/to/my/entry/file.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'my-first-webpack.bundle.js' }};
通过 output.filename 和 output.path 属性,来告诉 webpack bundle 的名称,以及我们想要 bundle 生成(emit)到哪里。可能你想要了解在代码最上面导入的 path 模块是什么,它是一个 Node.js 核心模块,用于操作文件路径。
生成(emitted 或 emit) 是“生产(produced)”或“释放(discharged)”的特殊术语
更多 output 可配置的特性
更多 output 概念
loader
loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。
本质上,webpack loader 将所有类型的文件,转换为应用程序的依赖图(和最终的 bundle)可以直接引用的模块。
loader 能够 import 导入任何类型的模块(例如 .css 文件),这是 webpack 特有的功能,其他打包程序或任务执行器的可能并不支持。我们认为这种语言扩展是有很必要的,因为这可以使开发人员创建出更准确的依赖关系图。
在更高层面,在 webpack 的配置中 loader 有两个目标:
test 属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。
use 属性,表示进行转换时,应该使用哪个 loader。
webpack.config.js
const path = require('path');
const config = { output: { filename: 'my-first-webpack.bundle.js' }, module: { rules: [ { test: /\.txt$/, use: 'raw-loader' } ] }};
module.exports = config;
以上配置中,对一个单独的 module 对象定义了 rules 属性,里面包含两个必须属性:test 和 use。这告诉 webpack 编译器(compiler) 如下信息:“嘿,webpack 编译器,当你碰到「在 require()/import 语句中被解析为 '.txt' 的路径」时,在你对它打包之前,先使用 raw-loader 转换一下。”
在 webpack 配置中定义 loader 时,要定义在 module.rules 中,而不是 rules。在定义错误时 webpack 会给出严重的警告。
插件(plugins)
loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。
想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建它的一个实例。
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装const webpack = require('webpack'); // 用于访问内置插件
const config = { module: { rules: [ { test: /\.txt$/, use: 'raw-loader' } ] }, plugins: [ new HtmlWebpackPlugin({template: './src/index.html'}) ]};
module.exports = config;
插件列表
模式
通过选择 development 或 production 之中的一个,来设置 mode 参数,你可以启用相应模式下的 webpack 内置的优化
module.exports = { mode: 'production'};
Getting Started
从零开始一个基本的构建过程
Vue CLI Webpack 相关
简单的配置方式
webpack 配置最简单的方式就是在 vue.config.js
中的 configureWebpack
选项提供一个对象:
// vue.config.jsmodule.exports = { configureWebpack: { plugins: [ new MyAwesomeWebpackPlugin() ] }}
该对象将会被 webpack-merge 合并入最终的 webpack 配置。
有些 webpack 选项是基于
vue.config.js
中的值设置的,所以不能直接修改。例如,应该修改vue.config.js
中的outputDir
选项而不是output.path
;应该修改vue.config.js
中的publicPath
选项而不是output.publicPath
。因为vue.config.js
中的值会被用在配置里的多个地方,以确保所有的部分都能正常工作在一起。:::
如果需要基于环境有条件地配置行为,或者想要直接修改配置,那就换成一个函数 (该函数会在环境变量被设置之后懒执行)。该方法的第一个参数会收到已经解析好的配置。在函数内,你可以直接修改配置,或者返回一个将会被合并的对象:
// vue.config.jsmodule.exports = { configureWebpack: config => { if (process.env.NODE_ENV === 'production') { // 为生产环境修改配置... } else { // 为开发环境修改配置... } }}
链式操作 (高级) Chaining (Advanced)
Vue CLI 内部的 webpack 配置是通过 webpack-chain 维护的。这个库提供了一个 webpack 原始配置的上层抽象,使其可以定义具名的 loader 规则和具名插件,并有机会在后期进入这些规则并对它们的选项进行修改。
它允许更细粒度的控制其内部配置。常见修改 vue.config.js
中的 chainWebpack
修改 Loader 选项
// vue.config.jsmodule.exports = { chainWebpack: config => { config.module .rule('vue') .use('vue-loader') .loader('vue-loader') .tap(options => { // 修改它的选项... return options }) }}
对于 CSS 相关 loader 来说,推荐使用 css.loaderOptions 而不是直接链式指定 loader。这是因为每种 CSS 文件类型都有多个规则,而
css.loaderOptions
可以确保你通过一个地方影响所有的规则。
添加一个新的 Loader
// vue.config.jsmodule.exports = { chainWebpack: config => { // GraphQL Loader config.module .rule('graphql') .test(/\.graphql$/) .use('graphql-tag/loader') .loader('graphql-tag/loader') .end() // 你还可以再添加一个 loader .use('other-loader') .loader('other-loader') .end() }}
替换一个规则里的 Loader
如果你想要替换一个已有的基础 loader,例如为内联的 SVG 文件使用 vue-svg-loader
而不是加载这个文件:
// vue.config.jsmodule.exports = { chainWebpack: config => { const svgRule = config.module.rule('svg')
// 清除已有的所有 loader。 // 如果你不这样做,接下来的 loader 会附加在该规则现有的 loader 之后。 svgRule.uses.clear()
// 添加要替换的 loader svgRule .use('vue-svg-loader') .loader('vue-svg-loader') }}
修改插件选项
// vue.config.jsmodule.exports = { chainWebpack: config => { config .plugin('html') .tap(args => { return [/* 传递给 html-webpack-plugin's 构造函数的新参数 */] }) }}
你需要熟悉 webpack-chain 的 API 并阅读一些源码以便了解如何最大程度利用好这个选项,但是比起直接修改 webpack 配置,它的表达能力更强,也更为安全。
比方说你想要将 index.html
默认的路径从 /Users/username/proj/public/index.html 改为 /Users/username/proj/app/templates/index.html。通过参考 html-webpack-plugin 能看到一个可以传入的选项列表。可以在下列配置中传入一个新的模板路径来改变它:
// vue.config.jsmodule.exports = { chainWebpack: config => { config .plugin('html') .tap(args => { args[0].template = '/Users/username/proj/app/templates/index.html' return args }) }}
可以通过接下来要讨论的工具 vue inspect
来确认变更。
审查项目的 webpack 配置
Inspecting the Project's Webpack Config
因为 @vue/cli-service
对 webpack 配置进行了抽象,所以理解配置中包含的东西会比较困难,尤其是当你打算自行对其调整的时候。
vue-cli-service
暴露了 inspect
命令用于审查解析好的 webpack 配置。那个全局的 vue
可执行程序同样提供了 inspect
命令,这个命令只是简单的把 vue-cli-service inspect
代理到了你的项目中。
该命令会将解析出来的 webpack 配置、包括链式访问规则和插件的提示打印到 stdout。
你可以将其输出重定向到一个文件以便进行查阅:
vue inspect > output.js
它输出的并不是一个有效的 webpack 配置文件,而是一个用于审查的被序列化的格式。
也可以通过指定一个路径来审查配置的一小部分:
# 只审查第一条规则vue inspect module.rules.0
或者指向一个规则或插件的名字:
vue inspect --rule vuevue inspect --plugin html
最后,你可以列出所有规则和插件的名字:
vue inspect --rulesvue inspect --plugins
以一个文件的方式使用解析好的配置
有些外部工具可能需要通过一个文件访问解析好的 webpack 配置,比如那些需要提供 webpack 配置路径的 IDE 或 CLI。在这种情况下你可以使用如下路径:
/node_modules/@vue/cli-service/webpack.config.js
该文件会动态解析并输出 vue-cli-service
命令中使用的相同的 webpack 配置,包括那些来自插件甚至是你自定义的配置。
vue webpack打包入口文件是哪个_Vue 学习笔记(二十五):webpack 相关相关推荐
- vue webpack打包入口文件是哪个_Vue项目起步
一,安装nodejs软件(直接商城搜索安装即可). 二,配置npm npm install npm -g 三,配置webpack,在cmd中安装. npm install -g webpack npm ...
- vue rules 两个输入框不能相等_Vue 学习笔记(二十五):webpack 相关
Webpack 是什么 Vue CLI Webpack 相关 Webpack 更多参考官方文档 Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定 ...
- Objective-C学习笔记第十五章文件加载与保存
第十五章文件加载与保存 Cocoa提供了Core Data,他能在后台处理所有文件内容 Cocoa提供了两个通用的文件处理类:属性列表和对象编码 一.属性列表类 在Cocoa中,有一类名为属性列表的对 ...
- Mr.J-- jQuery学习笔记(二十二)--入口函数
入口函数的作用:等待页面加载完毕,有一个独立的作用域. 原生JS 和 jQuery 入口函数区别: (1)JS的window.onload事件必须要等到所有内容,以及外部图片之类的文件加载完之后,才会 ...
- 【RK3399Pro学习笔记】十五、ROS中launch启动文件的使用方法
目录 Launch文件语法 <launch><launch><launch> <node><node><node> 参数设置 & ...
- 聚合多个文件_python数据分析与挖掘(二十五)--- Pandas高级处理分组与聚合
分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况 想一想其实刚才的交叉表与透视表也有分组的功能,所以算是分组的一种形式,只不过他们主要是计算次数或者计算比例!!看其中 ...
- webpack 入口文件 php,如何实现webpack多入口文件打包配置
本篇文章主要介绍了webpack多入口文件页面打包配置详解,现在分享给大家,也给大家做个参考. 大多数情况下,我们使用 webpack来打包单页应用程序,这个时候只需要配置一个入口,一个模板文件,但也 ...
- 快速解决Vue项目打包后文件过大问题
快速解决Vue项目打包后文件过大问题 为什么打包后文件过大? 如何快速解决 一.路由懒加载[使用es6提案的import()方式] 二.CDN引入 为什么打包后文件过大? 移动app项目,使用vue- ...
- webpack打包js文件的问题
前言 这里记录下webpack打包js文件的配置和遇到的问题.因环境版本等不同,解决办法未必都是通用的,仅作为大家参考之用: 我的环境配置 macOS M1 系统 webpack版本:(全局版本)we ...
最新文章
- 六分钟学会创建Oracle表空间的步骤
- C#_Math函数总结
- 在VMware Workstation上安装Kali Linux
- AnyChat Server SDK与SDK Filter Plus有何差异?
- 【活动回顾】Edge X Kubernetes,探索云原生新边界
- Find All Numbers Disappeared in an Array
- 自动利用webshell执行系统命令py脚本
- 【theano-windows】学习笔记二十——LSTM理论及实现
- pl/sql中的赋值运算符_如何在SQL中使用AND / OR运算符?
- r语言清除变量_如何优雅地计算多变量 | R语言进阶
- 辐射避难所买了东西显示服务器异常,《辐射:避难所》常见问题汇总
- vim移动一行或一段代码
- 免费 Python 学习资源大全,你想要都在这里啦(持续更新,欢迎收藏关注点赞加评论哦)
- Luogu1456 Monkey King
- hadoop安装和配置 详解
- Spyder5.3.3无法使用下载好的库
- 如何使用SLM生成涡旋光束
- 如何开启WIN10卓越性能模式
- Centos7机器配置Google Authenticator动态密钥进行ssh二次验证图文详解
- ElasticSearch 可视化工具之cerebro
热门文章
- Centos7:mysql5.6安装,配置及使用(RPM方式)
- 898 C. Phone Numbers
- Elastci LogStash
- ☆☆在Eclipse中编译NDK的so文件(普通安卓项目转换为NDK项目的设定)
- ZOJ 1004 Anagrams by Stack(DFS+数据结构)
- Linux下编译Jsoncpp
- TCP通信过程大讨论
- 优雅地用宏实现环形缓冲区
- 想要学好C++有哪些技巧?
- mysql显示RMB符号乱码_mysql显示乱码