これを考慮すると、Webpack 3.8.1
の設定です。Webpackツリーは、dead_develope除去で振るとnode_moduleで動作しますか?
// common
module.exports = {
context: path.resolve(__dirname, './src'),
entry: [
'whatwg-fetch',
'./index'
],
output: {
path: path.resolve(__dirname, 'build/assets'),
publicPath: '/assets/',
filename: 'main.js'
},
plugins: [
new CleanWebpackPlugin(['build']),
],
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
}
}, {
test: /\.(scss|css)$/,
use: [{
loader: 'style-loader'
}, {
loader: 'css-loader'
}, {
loader: 'sass-loader'
}],
}, {
test: /\.(png|jpg|gif|woff2|woff)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192
}
}
]
}]
}
};
//prod
module.exports = merge(common, {
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production')
}),
new UglifyJSPlugin()
],
devtool: 'none'
});
このBabel 6.26.0
設定
{
"presets": [
[
"env",
{
"modules": false,
"targets": {
"browsers": [
">1%"
]
}
}
], [
"react"
]
],
"plugins": [
"transform-class-properties",
"transform-export-extensions",
"transform-object-rest-spread",
"react-hot-loader/babel"
]
}
私は木がUglifyJS
のデッドコード削除と一緒に揺れは例えば、index.es.js
モジュールから名前の輸入を書くために私を可能にする方法で動作する必要があることを期待していたMaterial-UI-Icons
未使用のものはバンドルから削除されます。
import {Menu} from 'material-ui-icons';
このライブラリは確か"module": "index.es.js"
としてpackage.jsonで定義された再輸出ES6モジュールを行います。
ただし、単一のアイコンをインポートした後、バンドルサイズが0.5MB増加しました。私が変更したとき
import Menu from 'material-ui-icons/Menu;
このアイコンだけをインポートすると、バンドルサイズが再び小さくなりました。
私の設定に何か間違いがありますか、またはツリーシェイキングがどのように機能し、このシナリオには当てはまらないのか分かりませんか?
あなたが明示的に使用しているパッケージのドキュメントは、そのツリーを揺さぶってください** **それと一緒に作業する必要があります:https://github.com/callemall/material-ui/tree/v1- beta/packages/material-ui-icons#examples –
プロダクションモードまたはデモモードでバンドルサイズを測定していますか? –
私は、それが私のプロジェクト全体で詳細に検討しても機能しないと考え始めています。バンドル・サイズは、プロダクション・モードで掲示された構成を使用して確認されます。縮小を無効にすると、バンドル内に「未使用のハーモニー...」というコメントがあるので、少なくともこのプロセスの一部が動作すると仮定します。 –