唉,最近深入webpack,遇到好多問(wèn)題,還請(qǐng)各路好漢指教。。。。
首先,我們?cè)陂_(kāi)發(fā)一個(gè)npm包,入口文件類(lèi)似這種:
const canvas= r => require.ensure([], () => r(require('./canvas')), 'canvas')
const util= r => require.ensure([], () => r(require('./util')), 'util')
module.exports = {
canvas,
util
}
這樣做的目的是避免后期,入口文件過(guò)大,想實(shí)施懶加載,后期import {canvas} from xxx,不會(huì)引用到util。
下面是webpack的配置文件:
const webpack = require('webpack')
const path = require('path')
const moment = require('moment')
console.log(path.resolve(__dirname))
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
const config = {
context: resolve('src'),
entry: '../src/app.js',
output: {
path: resolve('dist'),
filename: '[name].bundle.js',
libraryTarget:'umd',
// publicPath: '',
// chunkFilename: 'module/[name].min.js'
},
module: {
rules: [{
test: /\.js$/,
include: resolve('src'),
use: [{
loader: 'babel-loader',
options: {
presets: ['env']
}
}]
}]
}
}
module.exports = config
打包完成后:
npm publish發(fā)布這個(gè)包。
然后在另一個(gè)項(xiàng)目中B中安裝npm包,并使用import { canvas} from xxx,main.bundle.js可以加載到,
但是它的兩個(gè)子模塊0.bundle.js/1.bundle.js均是404,而且加載的路徑是相對(duì)于B項(xiàng)目,嘗試過(guò)使用publishPath,然而并沒(méi)有用。
謝謝您看完我啰嗦的描述,還是希望您能給點(diǎn)意見(jiàn)和經(jīng)驗(yàn),謝謝~~
npm包的按需加載不是這樣做的,你這是工程項(xiàng)目上的按需加載,兩個(gè)不是同一個(gè)概念,也不是同樣的解決手段。
npm包的按需加載,是讓別人使用時(shí),只加載想要的部分,具體手段可以是導(dǎo)出es模塊,讓使用者通過(guò)tree-shaking實(shí)現(xiàn),亦或者 直接把不同的模塊 打包到 單獨(dú)的目錄,使用者加載時(shí),自己去尋找對(duì)應(yīng)的目錄。
而require.ensure 這個(gè)是工程項(xiàng)目上做懶加載時(shí)的方案,是通過(guò)異步chunk實(shí)現(xiàn)的,不是同一個(gè)東西。
想要深入了解tree-shaking,可以看我的這篇文章 https://segmentfault.com/a/11...
將你的webpack.config.js中的publicPath做成變量,打包部署時(shí),根據(jù)你的需要將publicPath設(shè)置為需要的值即可。
例如,打包運(yùn)行的命令為:
webpack --env production
或者:NODE_ENV=production webpack
webpack.config.js寫(xiě)法:
module.exports = function(env, args) {
env = env || process.env.NODE_ENV;
return {
entry: {
app: './src/index.jsx',
},
output: {
filename: SCRIPT_FORMAT,
chunkFilename: SCRIPT_FORMAT,
path: path.resolve(__dirname, 'dist'),
publicPath: env === 'production' ? '/assets/react/' : '/';
},
};
};
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。