webpackjs合併,webpack代碼分割

本文目錄一覽:

webpack 合併的時候怎麼不處理第三方js,例如jquery

var webpack = require(‘webpack’);

var ignoreFiles = new webpack.IgnorePlugin(/\.\/jquery-last.js$/);

module.exports = {

entry: ‘./main’,

output: {

path: __dirname,

filename: ‘bundle.js’

},

plugins: [ignoreFiles]

webpack打包原理

webpack打包原理是根據文件間的依賴關係對其進行靜態分析,然後將這些模塊按指定規則生成靜態資源,當 webpack 處理程序時,它會遞歸地構建一個依賴關係圖(dependency graph),其中包含應用程序需要的每個模塊,然後將所有這些模塊打包成一個或多個 bundle。

webpack有兩種組織模塊的依賴方式,同步、非同步。非同步依賴將作為分割點,形成一個新的塊;在優化了依賴樹之後,每一個非同步區塊都將作為一個文件被打包。

webpack有一個智能解析器,幾乎可以處理任何第三方庫。無論它們的模塊形式是CommonJS、AMD還是普通的JS文件;甚至在載入依賴的時候,允許使用動態表require(“、/templates/”+name+”、jade”)。

擴展資料

在使用webpack構建的典型應用程序或站點中,有三種主要的代碼類型:

1、團隊編寫的源碼。

2、源碼會依賴的任何第三方的library或”vendor”代碼。

3、webpack的runtime和manifest,管理所有模塊的交互。

runtime 包含:在模塊交互時,連接模塊所需的載入和解析邏輯;包括瀏覽器中的已載入模塊的連接,以及懶載入模塊的執行邏輯。

使用 webpack 打包 js

通過 命令行工具打包: webpack app.js bundle.js; 打包完成後會在同目錄下生成bundle.js.

app.js: 入口文件;

bundle.js: 打包好的文件。

通過amd規範定義的, 打包後會生成一個bundle.js 和 一個 1.bundle.js, 兩個bundle.js 文件

怎麼理解js所謂的打包

所謂打包就是將多個js文件合併,壓縮,為什麼需要打包呢,因為js合併之後可以減少前端js引用js的數量和體積,數量少了js載入就相對快一些。為什麼會說體積也減小了呢,因為現在流行的打包工具例如webpack在打包的過程中不只是簡單的把多個js文件合併成一個文件這麼簡單,它還會多js進行壓縮,例如去掉無效的空格,替換較長的變數名函數名等,最後讓你的js文件變得更小。

webpack打包Js文件

a .

注意點:index.js就是需要打包的文件打包之後的文件會放到dist目錄中, 名稱叫做main.js

b .

這句指令的含義是: 利用webpack將index.js和它依賴的模塊打包到一個文件中

其實在webpack指令中除了可以通過命令行的方式告訴webpack需要打包哪個文件以外,

還可以通過配置文件的方式告訴webpack需要打包哪個文件

這句指令的含義是將webpack將index.js和他依賴的模塊打包到一個文件中

其實webpack打包指令除了可以通知要打包哪些文件,還可以通過配置

2.2webpack常見配置

剛才是輸入npx webpack index.js 那麼現在就可以輸入npx webpack了

如果想要使用其他指令,可以直接修改的 package.json 的scirpts

以後再打包的時候,就可以直接使用npm run test了;

當然,還可以看下devtool的取值,他生成的sourcemap映射表,對打包後的包的大小和打包速度有很大影響

React | 使用webpack構建React項目

配置 React 項目,需要完成的工作:

1、編譯 jsx,es6,scss 等資源

2、自動引入靜態資源到 html 頁面

3、實時編譯和刷新瀏覽器

4、按指定模塊化規範自動包裝模塊

5、自動給 css 添加瀏覽器內核前綴

6、按需打包合併 js、css

根據 webpack 文檔編寫最基本的 webpack 配置,直接使用 node api 的方式

/* webpack.config.js */

var webpack= require( ‘webpack’ );

// 輔助函數  var utils= require( ‘./utils’ );

var fullPath=utils.fullPath;

var pickFiles=utils.pickFiles;

// 項目根路徑  var ROOT_PATH=fullPath( ‘../’ );

// 項目源碼路徑  var SRC_PATH=ROOT_PATH+ ‘/src’ ;

// 產出路徑  var DIST_PATH=ROOT_PATH+ ‘/dist’ ;

// 是否是開發環境  var __DEV__= process.env. NODE_ENV !== ‘production’ ;

// conf

var alias=pickFiles({

id :/(conf\/[^\/]+).js$/,

pattern :SRC_PATH+ ‘/conf/*.js’

});

// components

alias= Object.assign(alias,pickFiles({

id :/(components\/[^\/]+)/,

pattern :SRC_PATH+ ‘/components/*/index.js’

}));

// reducers

alias= Object.assign(alias,pickFiles({

id :/(reducers\/[^\/]+).js/,

pattern :SRC_PATH+ ‘/js/reducers/*’

}));

// actions

alias= Object.assign(alias,pickFiles({

id :/(actions\/[^\/]+).js/,

pattern :SRC_PATH+ ‘/js/actions/*’

}));

var config= {

context :SRC_PATH,

entry : {

app : [ ‘./pages/app.js’ ]

},

output : {

path :DIST_PATH,

filename : ‘js/bundle.js’

},

module : {},

resolve : {

alias :alias

},

plugins : [

new webpack.DefinePlugin({

//

“process.env.NODE_ENV” : JSON .stringify(process.env. NODE_ENV || ‘development’ )

})

]

};

module.

exports =config;

/* webpack.dev.js */

var webpack= require( ‘webpack’ );

var WebpackDevServer= require( ‘webpack-dev-server’ );

var config= require( ‘./webpack.config’ );

var utils= require( ‘./utils’ );

var PORT=8080;

var HOST=utils.getIP();

var args= process.argv;

var hot=args.indexOf( ‘–hot’ ) -1;

var deploy=args.indexOf( ‘–deploy’ ) -1;

// 本地環境靜態資源路徑  var localPublicPath= ‘http://’ +HOST+ ‘:’ +PORT+ ‘/’ ;

config.output. publicPath =localPublicPath;

config.entry.app.unshift( ‘webpack-dev-server/client?’ +localPublicPath);

new WebpackDevServer(webpack(config), {

hot :hot,

inline : true ,

compress : true ,

stats : {

chunks : false ,

children : false ,

colors : true

},

// Set this as true if you want to access dev server from arbitrary url.

// This is handy if you are using a html5 router.

historyApiFallback : true ,

}).listen(

PORT,HOST, function () {

console .log(localPublicPath);

});

編譯 jsx、es6、scss 等資源:

● 使用 bael 和 babel-loader 編譯 jsx、es6

● 安裝插件: babel-preset-es2015 用於解析 es6

● 安裝插件:babel-preset-react 用於解析 jsx

// 首先需要安裝 babel

$ npm i babel-core

// 安裝插件

$ npm i babel-preset-es2015babel-preset-react

// 安裝 loader

$ npm i babel-loader

在項目根目錄創建 .babelrc 文件:

{

“presets” : [ “es2015” , “react” ]

}

在 webpack.config.js 里添加:

// 使用緩存 var CACHE_PATH = ROOT_PATH + ‘/cache’ ;

// loaders

config.module. loaders = [];

// 使用 babel 編譯 jsx 、 es6

config.module. loaders .push({

test :/\.js$/,

exclude :/node_modules/,

include : SRC_PATH,

// 這裡使用  loaders ,因為後面還需要添加  loader

loaders : [ ‘babel?cacheDirectory=’ + CACHE_PATH ]

});

接下來使用 sass-loader 編譯 sass:

$ npm i sass-loader node-sasscss-loader style-loader

●css-loader 用於將 css 當做模塊一樣來 import

●style-loader 用於自動將 css 添加到頁面

在 webpack.config.js 里添加:

// 編譯  sass

config.module. loaders .push({

test :/\.(scss|css)$/,

loaders : [ ‘style’ , ‘css’ , ‘sass’ ]

});

自動引入靜態資源到相應 html 頁面

● 使用 html-webpack-plugin

$ npm i html-webpack-plugin

在 webpack.config.js 里添加:

// html  頁面  var HtmlwebpackPlugin= require( ‘html-webpack-plugin’ );

config.

plugins .push(

new HtmlwebpackPlugin({

filename : ‘index.html’ ,

chunks : [ ‘app’ ],

template : SRC_PATH + ‘/pages/app.html’

})

);

打包合併 js、css

webpack 默認將所有模塊都打包成一個 bundle,並提供了 Code Splitting 功能便於我們按需拆分。在這個例子里我們把框架和庫都拆分出來:

在 webpack.config.js 添加:

config.entry. lib = [

‘react’ , ‘react-dom’ , ‘react-router’ ,

‘redux’ , ‘react-redux’ , ‘redux-thunk’

]

config.output. filename = ‘js/[name].js’ ;

config.

plugins .push(

new webpack.optimize.CommonsChunkPlugin( ‘lib’ , ‘js/lib.js’ )

);

// 別忘了將  lib  添加到  html  頁面

// chunks: [‘app’, ‘lib’]

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154282.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-15 03:26
下一篇 2024-11-15 03:26

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29
  • Python愛心代碼動態

    本文將從多個方面詳細闡述Python愛心代碼動態,包括實現基本原理、應用場景、代碼示例等。 一、實現基本原理 Python愛心代碼動態使用turtle模塊實現。在繪製一個心形的基礎…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29

發表回復

登錄後才能評論