在一次運營後台的常規更新時,發現有乙個外部依賴包不能正常工作。經排查發現,react-split-pane
在前幾天發了乙個新版0.1.81,該版本同時提供commonjs和es 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...