使用webpack resolveLoader别名或如何缩短require路径

时间:2016-03-04 13:07:33

标签: webpack

我有这个:

let avatar = require ('../../../public/assets/img/avatar.jpg');

我希望能够使用这样的东西:

let avatar = require('alias!./img/avatar.jpg');

我尝试做的是在webpack配置中设置一个别名,如下所示:

resolveLoader: {
    alias: {
        'alias': path.join(__dirname, '../public/assets/'),
    }
},

路径确实解析为正确的目录,文件就在那里。原始长期需要正常工作。但是使用别名我得到了

错误:无法解析'文件'或者'目录' ./img/avatar.jpg

我是否在别名配置中遗漏了某些内容,或者我没有使用正确的工具来实现此目的?

2 个答案:

答案 0 :(得分:2)

resolveLoader用于解析加载程序,但您指定的路径不是加载程序。

在webpack中,我通常在resolve.alias中做类似的事情。

resolve: {
  alias: {
    '@assets': '@/public/assets',
  },
}

上面使用src/public/assets@assets创建了一个别名。

现在您可以这样做:

let avatar = require ('@assets/img/avatar.jpg');

这将使webpack将其解析为正确的路径。

答案 1 :(得分:0)

一种方法是设置modulesDirectories选项,以定义您希望webpack解析路径的新文件夹。

https://webpack.github.io/docs/configuration.html#resolve-modulesdirectories

没有看到你的webpack.config.js。我还怀疑,您可能希望将这些选项设置为resolve而不是resolveLoader

resolve: {
    modulesDirectories: [
        'path/to/assets'
    ]
},

然后......

let avatar = require('./img/avatar.jpg');
// should look at 'path/to/assets/img/avatar.jpg'