问题
最近做了个稍微大点项目,npm run build 后几百上千个文件直接放到一个目录直铺下来,bundle.js 都找不到了。
解决方法
首先把图片放子目录下
在 module.loaders 配置中图片加载要使用 file-loader,在 name 参数的 [name] 前加目录名。
{
test: /\.(png|jpe?g|gif)$/,
loader: "file?name=__images_build__/[name].[ext]"
}
其他的字体等资源也可以这样优化。
再把 entry 生成的 bundle 放子目录
看看 Webpack output config 各项的意思
• path 配置输出目录
• filename 配置输出的文件名
• publicPath 配置最终线上使用的路径,在 webpack plugin hook 中会输出这一路径
可以利用的是 filename 一项 ,当要把生成的 js css 单独放子目录时,可以在文件名前加目录名。
比如以下修改生成的 js 放输出目录下的子目录 __bundle_build__ 下。
thisConfig.output = {
filename: '__bundle_build__/[name].[hash].js',
path: './build',
publicPath: '/'
}
生成的最终效果如:
webpack-build
├── __bundle_build__
│ ├── main.css
│ ├── mainA.js
│ └── mainB.js
├── __images_build__
│ ├── a.png
│ └── b.png
└── index.html
修改 filename 而不是 path 的原因
我们试一下在 path 下加子目录 './build/__bundle_build__' 而不是改 filename。
thisConfig.output = {
filename: '[name].[hash].js',
path: './build/__bundle_build__',
publicPath: '/'
}
看看结果:
webpack-build
└── __bundle_build__
├── main.css
├── mainA.js
├── mainB.js
├── __images_build__
│ ├── a.png
│ └── b.png
└── index.html
本文同步发布在我博客:http://zaishanda.com/post/10
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。