我发现我需要在../
个文件中输入require()
。我的目录结构包括:
js/
components/
...
actions/
...
从components文件夹中,我需要import foo from '../actions/fooAction'
。是否可以将根目录作为项目的根目录?即我想改为import foo from '/actions/fooAction'
。我尝试设置Webpack的resolve.root
选项,但它似乎没有做任何事情。
答案 0 :(得分:27)
resolve.root
选项不会修改 file modules的解析方式。
前缀为“/”的必需模块是文件的绝对路径。例如,require('/ home / marco / foo.js')将在/home/marco/foo.js加载文件。
/
解析为文件系统的根目录。
也许您想要的是将js
文件夹解析为modules directory。
<强> webpack.config.js 强>
resolve: {
root: path.resolve('./js')
}
使用此配置添加到您的配置文件将告诉webpack解析相对于您的import
文件夹的任何require
或js
。然后,而不是使用
import foo from '../actions/fooAction'
你将能够:
import foo from 'actions/fooAction`
注意开头缺少/
。
答案 1 :(得分:1)
其他解决方案是使用resolve.alias
像模块一样导入 js (我不是说这是一个模块,只是语法相似)。
resolve: {
alias: {
js: path.resolve(__dirname, './js'),
},
}
您可以通过以下方式导入fooAction
:
import foo from 'js/actions/fooAction';
答案 2 :(得分:1)
现在您应该使用
resolve: {
roots: [
path.resolve(__dirname, 'src', 'components'),
],
},
查看更多https://webpack.js.org/configuration/resolve/#resolveroots
答案 3 :(得分:0)
解决过程基本上很简单,区分了三种变体:
绝对路径: require(“/ home / me / file”)
相对路径: require(“../ src / file”)或require(“./ file”)
模块路径:require(“module / lib / file”)
确实是您文件系统的绝对
相对于当前文件(如果该文件位于src/foo/bar
或webpack/config/subconfig
,那么确实就是这样......)
与import
(处理1 + 2几乎相同,但会立即向node_modules
发送)路径'模块'确实意味着您的项目根目录无需解析的路径,例如您的网络包配置中的output.path
...以及:(解析时)只有3个受resolve.root
和resolve.moduleDirectories
解析,{{3 }} 强>