我现在正在做的是:
firebase.js
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import 'firebase/functions';
import 'firebase/storage';
const config = {
apiKey: process.env.FIREBASE_APP_API_KEY,
authDomain: process.env.FIREBASE_APP_AUTH_DOMAIN,
databaseURL: process.env.FIREBASE_APP_DATABASE_URL,
projectId: process.env.FIREBASE_APP_PROJECT_ID,
storageBucket: process.env.FIREBASE_APP_STORAGE_BUCKET,
messagingSenderId: process.env.FIREBASE_APP_MESSAGING_SENDER_ID,
appId: process.env.FIREBASE_APP_ID,
};
firebase.initializeApp(config);
export default firebase;
webpack.config.js
optimization: {
runtimeChunk: 'single',
splitChunks: {
chunks: 'all',
maxInitialRequests: Infinity,
minSize: 0,
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name(module) {
const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
return `npm.${packageName.replace('@', '')}`;
},
},
},
},
}
我从这篇文章中得到的webpack部分:
https://medium.com/hackernoon/the-100-correct-way-to-split-your-chunks-with-webpack-f8a9df5b7758
这就产生了这个小的667kbJS文件(这是生产版本):
问题
我可以用其他方式导入它,这样我就可以得到更小的块吗?
举例来说:
import firebase from 'firebase/app';
import auth from 'firebase/auth';
import firestore from 'firebase/firestore';
import functions from 'firebase/functions';
import storage from 'firebase/storage';
但我不知道要如何处理这些“额外对象”,因为我需要和使用的唯一对象是从firebase/app
获得的firebase
对象
另外,如果我像这样导入它们而不使用对象,Webpack不会将它们解释为“死代码”并对它们进行树摇吗?
什么是正确的方法来做这件事?
2条答案
按热度按时间nxagd54h1#
Firebase将这些导入直接加载到firebase对象中,没有办法从那里对它们进行treeshake。你可以做的是选择性地使用动态导入加载这些,然后webpack会处理这些代码。如果没有导入,这些示例不会被添加到firebase对象中,所以你可以做一个简单的if检查来加载它们。
例如,当您需要使用Firestore时,只需调用getFirestoreInstance
mv1qrgav2#
你应该使用我的配置。这些配置稍微减少了编译文件的大小。
webpack.config.js
我的脚本
package.json