Приветствую всех!
Сейчас Laravel для сборки js (как и css) использует webpack. Laravel использует webpack не напрямую, а при посредничестве laravel-mix. Это, с одной стороны, - помогает, а другой - накладывает свои ограничения и трудности.
Подключаю внутри одного js-файла другой, используя import:
import Vuetable from 'vuetable-2/src/components/Vuetable' // Путь относительно node_modules
import VuetablePagination from 'vuetable-2/src/components/VuetablePagination'
import CssConfig from '../../VuetableCssConfig' // Путь относительно текущего файла
Пока подключаем то, что лежит в node_modules (как в первых двух строках), все нормально. Но как только нужно подключить свой файл, то приходится прибегать к указанию пути относительно текущего (как в третьей строке). Что не очень, я считаю, красиво и удобно, если файл используется несколькими другими файлами.
Хотелось бы для своих файлов иметь возможность указать путь относительно папки
resources/accets/js:
import CssConfig from 'components/VuetableCssConfig'
Но, если сделать так, то когда запускаем
npm run watch (ну или dev, production - не важно), сборщик не видит подключаемого файла. Думаю, что это из-за того, что ищет он в node_modules.
Прочитал
ES6 Import Statement Without Relative Paths Using и
Laravel 5.5: Custom Webpack Configuration.
Пробовал указать в webpack.min.js:
...
let path = require('path');
mix.webpackConfig({
resolve: {
modules: [
path.resolve('./resources/assets/js'),
path.resolve('./node_modules')
]
}
});
и еще различные вариации (в том числе с __dirname, как во второй статье). Но результат тот же. Файл при сборке не находится.
Текст ошибки, на всякий случай:
This dependency was not found:
* components/VuetableCssConfig in ./~/babel-loader/lib?{"cacheDirectory":true,"presets":[["es2015",{"modules":false}]]}!./~/vue-loader/lib/selector.js?type=script&index=0!./resources/assets/js/components/earnings/EarningsTable.vue
To install it, you can run: npm install --save components/VuetableCssConfig
Может кто подскажет как сделать так, чтобы webpack искал не только в node_modules, но и в других, нужных, папках. Ну или другой способ, который позволит избежать указания пути относительно текущего js-файла.