微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Webpack 提取加载器未正确解析别名

如何解决Webpack 提取加载器未正确解析别名

Webpack v4.42.0

我试图让 webpack 在 html img 标签提取我的图像资产,但它似乎不尊重我的 webpack 解析别名。就我在其他帖子中看到的而言,我应该能够用 ~ 字符作为字符串前缀,但它似乎对我不起作用。

我收到以下错误Error: Cannot find module '@assets/img/avatar_default.jpg'

这有效(相对路径):

<img src="../../../assets/img/avatar_default.jpg" />

这不起作用(别名):

<img src="~@assets/img/avatar_default.jpg" />

我的 webpack 配置了以下别名:

resolve: {
    alias: {
        '@': path.resolve(fs.realpathSync(process.cwd()),'@assets': path.resolve(__dirname,'src/assets/'),}
}

还有我的 html-loader 配置:

{
    loader: 'html-loader',options: {
        minimize: false,preprocessor: (content,loaderContext) => {
            // Allow using EJS/underscore templating to process templates
            // This is usually used for differences between different app builds (e.g. app vs. admin)
            let result;

            try {
                result = ejs.render(content,{
                    _WHICH_APP_,});
            } catch (error) {
                loaderContext.emitError(error);

                return content;
            }

            return result;
        },}
}

解决方法

好的,所以我想通了。

该问题与 extract-loader 相关,并且自 2020 年 5 月以来一直在等待合并到主存储库中的分叉 + 拉取请求。请参阅 this GitHub issuethis pull request。>

为了自己解决这个问题,我需要更新我的 package.json 文件中的 extract-loader 依赖项以指向这个固定的提交,然后添加一个 postinstall 脚本来构建 extract-loader安装固定版本。

package.json:

"scripts": {
    "postinstall": "cd node_modules/extract-loader && yarn install && yarn build"
},"devDependencies": {
    "extract-loader": "https://github.com/vseventer/extract-loader#7f8b82f3d6800e5ad078880594fa577f4503c64e",},

更新您的 package.json 文件后,只需运行 yarn install 来更新您的依赖项并构建固定的 extract-loader,然后重新运行您的 webpack 构建。如果您想验证您是否拥有正确版本的 extract-loader,您现在会看到错误显示 ModuleNotFoundError: Module not found: Error: Can't resolve 而不仅仅是 Error: Cannot find module

对于阅读本文的任何人,您是否知道仍然维护的提取加载器的替代方案?有点令人担忧的是,即使它已经被确定为工作 PR 一年了,它也没有得到修复。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?