为什么我的配置没有正确解析别名?
Why are aliases not resolved correctly with my config?
我的 webpack 配置中有以下 resolve
选项:
resolve: {
modules: ["./app/static/js/homepage/", "./app/static/js/dashboard/",],
extensions: [".js", ],
alias: {
"bootstrap": "../../bower_components/bootstrap/dist/js/bootstrap",
"lodash": "../../bower_components/lodash/lodash",
// ...
但是我得到这个错误:
ERROR in ./app/static/js/dashboard/main.js
Module not found: Error: Can't resolve 'underscore' in '/app/app/static/js/dashboard'
@ ./app/static/js/dashboard/main.js 84:0-112:2
这意味着它不会将 underscore
视为别名,这发生在我项目中的所有 define
中。
你将它们别名化为一个相对路径并且你向上两个目录(使用 ../../
),所以当你在 ./app/static/js/dashboard/main.js
中导入 lodash 时,它会尝试在 [=] 中找到模块19=]
./app/static/bower_components/lodash/lodash
假设您的 bower_components
在项目的顶层(如推荐的那样),您可以通过向上四个目录修复别名:
alias: {
"bootstrap": "../../../../bower_components/bootstrap/dist/js/bootstrap",
"lodash": "../../../../bower_components/lodash/lodash",
}
请注意,只有当您将它们导入到一个四层深的文件中时,这才有效。用绝对路径替换它们在任何地方都有效。
一个更简洁的解决方案是将 bower_components
添加到您的模块中,因此它会在每个 bower_component
目录中查找,这是将 bower 集成到 webpack 中的常用方法。有了它,您可以只使用 import _ from 'lodash/lodash'
而无需添加任何别名。但是如果您仍然想要一个别名,您可以按如下方式进行:
resolve: {
modules: ["bower_components"],
extensions: [".js"],
alias: {
"bootstrap": "bootstrap/dist/js/bootstrap",
"lodash": "lodash/lodash",
}
}
我的 webpack 配置中有以下 resolve
选项:
resolve: {
modules: ["./app/static/js/homepage/", "./app/static/js/dashboard/",],
extensions: [".js", ],
alias: {
"bootstrap": "../../bower_components/bootstrap/dist/js/bootstrap",
"lodash": "../../bower_components/lodash/lodash",
// ...
但是我得到这个错误:
ERROR in ./app/static/js/dashboard/main.js
Module not found: Error: Can't resolve 'underscore' in '/app/app/static/js/dashboard'
@ ./app/static/js/dashboard/main.js 84:0-112:2
这意味着它不会将 underscore
视为别名,这发生在我项目中的所有 define
中。
你将它们别名化为一个相对路径并且你向上两个目录(使用 ../../
),所以当你在 ./app/static/js/dashboard/main.js
中导入 lodash 时,它会尝试在 [=] 中找到模块19=]
./app/static/bower_components/lodash/lodash
假设您的 bower_components
在项目的顶层(如推荐的那样),您可以通过向上四个目录修复别名:
alias: {
"bootstrap": "../../../../bower_components/bootstrap/dist/js/bootstrap",
"lodash": "../../../../bower_components/lodash/lodash",
}
请注意,只有当您将它们导入到一个四层深的文件中时,这才有效。用绝对路径替换它们在任何地方都有效。
一个更简洁的解决方案是将 bower_components
添加到您的模块中,因此它会在每个 bower_component
目录中查找,这是将 bower 集成到 webpack 中的常用方法。有了它,您可以只使用 import _ from 'lodash/lodash'
而无需添加任何别名。但是如果您仍然想要一个别名,您可以按如下方式进行:
resolve: {
modules: ["bower_components"],
extensions: [".js"],
alias: {
"bootstrap": "bootstrap/dist/js/bootstrap",
"lodash": "lodash/lodash",
}
}