談談webpack對npm模組匯入的解析

2021-09-20 04:39:23 字數 1095 閱讀 4287

在一次運營後台的常規更新時,發現有乙個外部依賴包不能正常工作。經排查發現,react-split-pane在前幾天發了乙個新版0.1.81,該版本同時提供commonjses module兩種包匯入方式:

原來我們採用的cmd寫法const reactsplitpane = require('react-split-pane')失效了。 

翻查webpack官方文件後,發現webpack會對包匯入會進行解析,不管是採用cmd方式還是es6 import方式。 解析的依據是配檔案的

resolve.mainfields

屬性, 該屬性用於配置採用package.json的哪個字段作為模組的入口檔案。

以react-split-pane 模組為例,當resolve.mainfields = ['browser', 'module', 'main']時 , webpack在解析 如const reactsplitpane = require('react-split-pane')

import reactsplitpane from 'react-split-pane'的時候,會優先使用dist/index.esm.js。 由於採用

export default匯出的模組必須使用 import x from 'xx' 的方式(或 使用const x = require('x').default的方式) 匯入, 否則匯入後的模組會引用不正確.

如果 resolve.mainfiels 沒有顯式指定,則根據webpack的

target 的取值來決定其預設值

隨著es6的普及,相信會有越來越多的第三方模組提供 es module 版本,而mainfields的預設值中,module總是排在main之前 ,因此類似的問題還會發生。要從根本上解決這個問題,有以下的辦法

談談NPM和Webpack的關係

當包引入數量很多時管理就成為了乙個問題,這個就是npm為開發者行了方便之處,npm已經為你做好了依賴和版本的控制,也就是說使用npm可以讓你從繁雜的依賴安裝和版本衝突中解脫出來,進而關注你的業務而不是庫的管理 webpack是乙個工具,這個工具可以幫你處理好各個包 模組之間的依賴關係 modules...

npm模組安裝

最開始接觸npm看見很多吐槽npm在windows上的不穩定,就選擇了在linux的伺服器上使用,但是後來發現很多人都是在windows能正常使用的,而且在伺服器上操作難免有所不便,所以就開始了我的npm折騰之路。2 npm模組的安裝,模組安裝有兩種一種是在自己專案的路徑下本地安裝,一種是全域性安裝...

npm 模組 移除 命令全域性刪除所有npm模組?

我嘗試了kai sternad的解決方案,但對我來說似乎並不完美。awk在deps樹本身的最後乙個之後,還有許多特殊符號。因此,我想出了自己對kai sternad解決方案的修改 在cashmere想法的幫助下 npm ls gp depth 0 awk f node modules grep ve...