我在Webpack中遇到了一个关于相对路径的问题。
让我试着解释一下这种情况:
我在工作目录中有两个独立的项目:
- Project-A [使用Gulp打包]:稳定并且可用
- Project-B [使用Webpack打包]:新项目
由于这两个项目都使用相同的样式,因此我想将Project A的SCSS文件[包含标准变量,预定义布局,模态框,类等]重用到Project B中。
现在,如果我尝试将Project-A index.scss作为另一个部分导入到Project-B index.scss中[注释掉背景图像URL依赖项],Webpack可以生成所需的CSS输出文件。
// Import Project A SCSS [Common Varibles, Classes, Styling etc]
@import "../../../../Project_A/assets/stylesheets/index";
但由于Project-A的index.scss进一步引用了各自相对路径下的背景图片,webpack构建会报错:
'File / dir not found in XYZ/Project-B/Source/Stylesheets'。
精确的错误信息如下:
ERROR in ./src/assets/stylesheets/index.scss Module build failed: ModuleNotFoundError: 模块未找到:错误:无法解析 'file' 或 'diWorkSpace\Project_B\src\assets\stylesheets
我无法理解,为什么Webpack无法解析Project-A内部资源的相对路径,而仍在Project B中查找。
这是模拟问题的代码库URL: https://github.com/raviroshan/webpack-build-issue/tree/master/WorkSpace
复现步骤:
- 下载代码库。
- 进入Project_B文件夹,并执行npm install。
- 运行“webpack”。它将正确构建,因为相对图像URL代码被注释掉了。
- 现在把代码的被注释掉的那行放回去:https://github.com/raviroshan/webpack-build-issue/blob/master/WorkSpace/Project_A/assets/stylesheets/index.scss#L27
public/index.html
文件中添加了<base href="/the/root/folder/" />
来解决类似的问题(我喜欢这种解决方案,而不是再添加一个 npm 包)。 - Jacksonkr