resolve.alias
повинно працювати саме так, як ви описали, тому я надаю це як відповідь, щоб допомогти пом’якшити будь-яку плутанину, яка може виникнути внаслідок пропозиції в оригінальному запитанні, що це не працює.
конфігурація вирішення, подібна до наведеної нижче, дасть бажані результати:
// used to resolve absolute path to project's root directory (where web pack.config.js should be located)
var path = require( 'path' );
...
{
...
resolve: {
// add alias for application code directory
alias:{
mydir: path.resolve( __dirname, 'path', 'to', 'mydir' )
},
extensions: [ '', '.js' ]
}
}
require( 'mydir/myfile.js' )
буде працювати, як очікувалося. Якщо цього немає, має бути якесь інше питання.
Якщо у вас є кілька модулів, які ви хочете додати до шляху пошуку, resolve.root
має сенс, але якщо ви просто хочете мати можливість посилатися на компоненти в коді програми без відносних шляхів,alias
здається найбільш прямим і явним.
Важливою перевагою alias
є те, що він надає вам можливість простору імен для вашого require
s, що може додати ясності коду; так само, як легко зрозуміти від інших require
, на який модуль посилається, alias
дозволяє писати описові дані require
, які роблять очевидним, що вам потрібні внутрішні модулі, наприклад require( 'my-project/component' )
. resolve.root
просто переміщує вас у потрібний каталог, не даючи вам можливості надалі простору імен.
resolve.alias
працює саме так, як ви запропонували. Цікаво, чи це не вдалося через щось інше у вашійresolve
конфігурації. Я використовуюalias{ mydir: path.resolve( __dirname, 'path', 'to', 'mydir' )
іrequire( 'mydir/myfile.js' )
працює чудово.