webpack4與webpack3的區(qū)別
webpack4.0 以后,似乎執(zhí)行方式就發(fā)生了改變,不再是 webpack 一波流,而是多了一個(gè) webpack-cli。webpack3中webpack-cli是合在webpack中。所以在命令行運(yùn)行 webpack 命令的同時(shí),會(huì)提示讓你再裝一個(gè) webpack-cli。
執(zhí)行腳本到打包結(jié)束流程
1、當(dāng)我們安裝了webpack模塊后,就會(huì)在node_modules/.bin目錄下生成一個(gè)webpack、webpack.cmd,webpack是linux下的命令腳本,webpack.cmd是windows下命令腳本,webpack.cmd可以在windows系統(tǒng)上直接運(yùn)行。
每當(dāng)執(zhí)行npm run,就會(huì)自動(dòng)新建一個(gè) Shell,在這個(gè) Shell 里面執(zhí)行指定的腳本命令。因此,只要是 Shell(一般是 Bash)可以運(yùn)行的命令,就可以寫在 npm 腳本里面。
比較特別的是,npm run新建的這個(gè) Shell,會(huì)將當(dāng)前目錄的node_modules/.bin子目錄加入PATH變量(軟連接),執(zhí)行結(jié)束后,再將PATH變量恢復(fù)原樣。
這意味著,當(dāng)前目錄的node_modules/.bin子目錄里面的所有腳本,都可以直接用腳本名調(diào)用,而不必加上路徑。比如,當(dāng)前項(xiàng)目的依賴?yán)锩嬗?Mocha,只要直接寫mocha test就可以了。
執(zhí)行一下命令cd ./node_modules/.bin/

2、package.json中script配置dev: webpack --mode development,當(dāng)執(zhí)行npm run dev相當(dāng)于執(zhí)行webpack --mode development

webpack.cmd執(zhí)行時(shí)會(huì)判斷當(dāng)前目錄下是否存在node執(zhí)行程序,如果存在就使用當(dāng)前node進(jìn)程執(zhí)行node_modules/webpack/bin/webpack.js,如果當(dāng)前目錄下不存在node進(jìn)程,則使用全局(也就是本地)node執(zhí)行node_modules/webpack/bin/webpack.js文件
3、node_modules/webpack/bin/webpack.js首先會(huì)判斷是否安裝了webpack-cli模塊,如果沒(méi)有安裝webpack-cli模塊就會(huì)引導(dǎo)用戶去安裝,如果已經(jīng)安裝了webpack-cli模塊,就會(huì)去執(zhí)行node_modules/webpack-cli/bin/cli.js
CLIs = [ { name: "webpack-cli", package: "webpack-cli", binName: "webpack-cli", alias: "cli", installed: isInstalled("webpack-cli"), recommended: true, url: "https://github.com/webpack/webpack-cli", description: "The original webpack full-featured CLI." }, { // some coding }];const installedClis = CLIs.filter(cli => cli.installed);if (installedClis.length === 0) { // some coding const question = `Do you want to install 'webpack-cli' (yes/no): `; // some coding} else if (installedClis.length === 1) { const path = require("path"); const pkgPath = require.resolve(`${installedClis[0].package}/package.json`); const pkg = require(pkgPath); console.log(path.resolve( path.dirname(pkgPath), pkg.bin[installedClis[0].binName] )) // E:/項(xiàng)目/webpack學(xué)習(xí)/node_modules/webpack-cli/bin/cli.js require(path.resolve( path.dirname(pkgPath), pkg.bin[installedClis[0].binName] ));}
新聞熱點(diǎn)
疑難解答
圖片精選