Home >Web Front-end >Front-end Q&A >What is the difference between vite and webpack
Differences: 1. The webpack server startup speed is slower than that of vite; since vite does not need to be packaged when it is started, there is no need to analyze module dependencies and compile, so the startup speed is very fast. 2. Vite hot update is faster than webpack; in terms of HRM of Vite, when the content of a certain module changes, just let the browser re-request the module. 3. Vite uses esbuild to pre-build dependencies, while webpack is based on node. 4. The ecology of Vite is not as good as webpack, and the loaders and plug-ins are not rich enough.
The operating environment of this tutorial: windows7 system, vue3 version, DELL G3 computer.
The recent vite
is quite popular and has released version 2.0. The author of vue is also in Highly recommended
I mentioned in the previous article that the shortcoming of vite
is that the current ecology is not webpack
mature enough, but as long as it can By making up for this shortcoming, there is a high probability that it can replace most of the current webpack
market
webpack packaging process
1. Identify the entry file
2.Pass Identify module dependencies layer by layer. (Commonjs, amd or es6 import, webpack will analyze it. To obtain the dependencies of the code)
3. What webpack does is analyze the code. Convert the code, compile the code, and output the code
4. Finally form the packaged code
webpack packaging principle
1.First recursively identify dependencies step by step and build a dependency graph
2. Convert the code into an AST abstract syntax tree
3. Process the code in the AST stage
4. Convert the AST abstract syntax tree into a browse Code that the processor can recognize, and then output
Key point: Here you need to recursively identify dependencies and build a dependency graph. The graph object is similar to the following
{ './app.js': { dependencies: { './test1.js': './test1.js' }, code: '"use strict";\n\nvar _test = _interopRequireDefault(require("./test1.js"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nconsole.log(test 1);' }, './test1.js': { dependencies: { './test2.js': './test2.js' }, code: '"use strict";\n\nvar _test = _interopRequireDefault(require("./test2.js"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nconsole.log(\'th is is test1.js \', _test["default"]);' }, './test2.js': { dependencies: {}, code: '"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports["default"] = void 0;\n\nfunction test2() {\n console.log(\'this is test2 \');\n}\n\nvar _default = tes t2;\nexports["default"] = _default;' } }
vite principle
When declaring a script tag type as module
For example:
<script type="module" src="/src/main.js"></script>
The browser will initiate a GET
to the serverhttp://localhost:3000/src/main.js请求main.js文件: // /src/main.js: import { createApp } from 'vue' import App from './App.vue' createApp(App).mount('#app')
The browser requests the main.js file, detects that it contains the package introduced by import, and initiates an HTTP request to its internal import reference to obtain the content file of the module.
For example: GET http://localhost:3000/@modules/vue.js
For example: # The main function of ##GET http://localhost:3000/src/App.vue
is to hijack these requests of the browser. And perform corresponding processing on the backend to simply decompose and integrate the files used in the project, and then return them to the browser. Vite does not package and compile the files during the entire process, so its running speed is faster than the original webpack
The development and compilation speed is much faster!
Webpack Disadvantage 1. Slow server startup
vite improves
Webpack Disadvantages 2. Use node.js to implement
vite improvements
pre-built dependencies. Esbuild is written in Go and is 10-100 times faster than pre-building dependencies with packagers written in Node.js
.
Fatal disadvantage of webpack 3. Hot update is inefficient
When started based on the packager, edit After the file the file itself will be rebuilt. Obviously we shouldn't rebuild the entire package, because then the update speed will plummet as the application size grows.
Some packager development servers keep the build in memory so that they only need to deactivate part of the module graph when files change[1], but it also still requires the entire Rebuild and reload the page. This is expensive, and reloading the page erases the current state of the application, so the packager supports dynamic module hot reloading (HMR): allowing a module to "hot replace" itself with no impact on the rest of the page. This greatly improves the development experience - however, in practice we found that even HMR update speeds dropped significantly as the app size grew.
vite improvements
Vite only needs to invalidate exactly the link between the edited module and its nearest HMR boundary (most of the time just the module itself), making HMR updates always fast, no matter the size of the app.
vite Disadvantages 1. Ecology, ecology, ecology is not as good as webpack
vite Disadvantages 2. The construction of prod environment, currently using Rollup
##vite Disadvantage 3. It has not been used on a large scale, and many problems or demands have not been really exposed
Summary
##The webpack server starts slower than vitevite hot update is faster than webpack
web front-end development】
The above is the detailed content of What is the difference between vite and webpack. For more information, please follow other related articles on the PHP Chinese website!