github.com/masx200/web…javascript
查看源代碼 ./release/config/webpack.config.jshtml
若是沒有初始化 package.json,請先初始化vue
運行java
yarn init
複製代碼
或者node
npm init
複製代碼
npm install https://github.com/masx200/webpack-react-vue-spa-awesome-config.git --save
複製代碼
或者react
yarn add https://github.com/masx200/webpack-react-vue-spa-awesome-config.git
複製代碼
設置package.json
webpack
{
"scripts": {
"start": "webpack-react-vue-spa-awesome-config start",
"build": "webpack-react-vue-spa-awesome-config build"
}
}
複製代碼
yarn install
複製代碼
或者git
npm install
複製代碼
啓動 webpack-dev-servergithub
yarn start
複製代碼
或者
npm start
複製代碼
啓動 webpack
yarn build
複製代碼
或者
npm run build
複製代碼
npm install https://github.com/masx200/webpack-react-vue-spa-awesome-config.git -g
複製代碼
或者
yarn global add https://github.com/masx200/webpack-react-vue-spa-awesome-config.git
複製代碼
啓動 webpack-dev-server
webpack-react-vue-spa-awesome-config start
複製代碼
啓動 webpack
webpack-react-vue-spa-awesome-config build
複製代碼
若是入口文件不存在,則會自動生成入口文件
webpack 使用配置文件啓動的時候,默認不支持經過--mode=development
或者--mode=production
來設置 webpack 的模式,
在 webpack.config.js
文件中經過以下方式來判斷 webpack 的模式,即讀取process.argv
變量來得到傳入的參數設置的模式
process.argv.includes("--mode=production")
? (process.env.NODE_ENV = "production")
: (process.env.NODE_ENV = "development");
複製代碼
可使用@
代替src
目錄
啓用 Webpack 內置的 HMR,配合 react-hot-loader,增量更新 css 文件和 js 文件,修哪更哪,無需刷新頁面便可實時看見修改結果
可以使用動態導入的語法
(import().then())
複製代碼
,處理代碼時會單獨分離此模塊,執行頁面對應操做時才加載此模塊,使用才加載不使用則不加載(代碼懶加載),減小首屏加載代碼大小和渲染時間
使用 style-loader 和 css-loader 處理 CSS,把 CSS 從 JS 中單獨抽離出來
使用 sass-loader 處理 Sass,經過 node-sass 編譯 sass 文件爲 css 文件
使用 less-loader 處理 Less,經過 less 編譯 less 文件爲 css 文件
使用 babel-loader 根據預設環境和 browserslist 處理編寫的 ES6 代碼和 TS 代碼,並生成瀏覽器可識別的 ES5 代碼
使用 vue-loader 把*.vue
文件編譯成 vue 組件轉成 js 代碼
對業務代碼進行打包,分割成 WebpackRuntime 代碼塊、第三方依賴代碼塊、公共業務代碼塊、單個業務代碼塊
經過對相同模塊、相同功能或複用屢次的代碼進行總體合併,起到減包做用
CSS 壓縮:內置 MiniCssExtractPlugin 和 OptimizeCSSAssetsPlugin,對抽離出來的 CSS 進行壓縮去重
JS 壓縮:內置 uglifyjs 和 terser,對抽離出來的 JS 進行壓縮去重,uglifyjs 用於壓縮 ES5,terser 用於壓縮 ES6
啓用 Webpack 內置的 Tree Shaking,禁止 babel 把代碼轉換成 Commonjs 規範,使用 ESM 規範的靜態聲明特色來去除不被引用或不被執行的代碼塊,起到減包做用
css-loader / babel-loader /worker-loader/vue-loader/url-loader/style-loader/css-loader/sass-loader/file-loader
www.webpackjs.com/loaders/wor…
該錯誤來自 Web 工做者,由於 Web worker window 上不可用。
webpack.config.js
module.exports = {
output: {
globalObject: `( (typeof window !== "undefined" ? window : false) || (typeof WorkerGlobalScope !== "undefined" ? WorkerGlobalScope : false) || this)`
}
};
複製代碼
WorkboxWebpackPlugin.GenerateSW/MiniCssExtractPlugin/VueLoaderPlugin/HtmlWebpackPlugin/TerserPlugin/OptimizeCSSAssetsPlugin/webpack.HotModuleReplacementPlugin/WebpackDeepScopeAnalysisPlugin/UglifyJsPlugin
developers.google.cn/web/tools/w…
JavaScript Libraries for adding offline support to web apps
Workbox is a set of libraries and Node modules that make it easy to cache assets and take full advantage of features used to build Progressive Web Apps.
中止在網絡上等待!您能夠經過緩存和提供文件來提升 Web 應用程序的性能,這些文件由服務工做人員提供支持。
即便在不可靠的鏈接上,您的 Web 應用程序仍然可使用正確的運行時緩存策略。
想要構建一個漸進的 Web 應用程序?Workbox 能夠輕鬆建立離線初次體驗。
try {
"serviceWorker" in navigator &&
window.addEventListener("load", function() {
navigator.serviceWorker.register("service-worker.js");
});
} catch (error) {}
複製代碼