经过两天的尝试和错误(感谢Webpack文档!),我发现有一种方法可以控制file-loader的输出并在output目录中复制source目录的文件结构。这就是Webpack设置中的context
,它可以作为每个加载器以及每个构建使用。
以下是file-loader的示例:
use: [{
loader: 'file-loader',
options: {
context: <path>, // The directory to draw relative paths from
name: '[path][name].[ext]'
},
},
让我们更深入地了解它是如何工作的。
假设我们正在尝试通过 www.website.com/assets/images/user.png
加载一张图片,而我们项目的文件结构是:
project/
├── src/
│ └── assets/
│ └── images/
│ └── user.png
└── build/
所期望的结果是:
project/
├── src/
│ └── assets/
│ └── images/
│ └── user.png
└── build/
└── assets/
└── images/
└── user.png
这个的配置为:
use: [{
loader: 'file-loader',
options: {
context: path.resolve(__dirname, 'src')
name: '[path][name].[ext]'
},
},
这是因为你想在build
文件夹中复制src
文件夹下的文件结构。
如果你想从路径中移除assets
目录,那么context
的值应该是:path.resolve(__dirname, 'src/assets')
,此时file-loader将会以相对路径开始于'src/assets'的方式进行复制,结果如下:
project/
├── src/
│ └── assets/
│ └── images/
│ └── user.png
└── build/
└── images/
└── user.png
file-loader
的context
选项负责加载程序如何构建相对路径。这意味着:context
= 在src目录中复制相对路径以在生成的构建目录中使用的根文件夹。 - pilau