У меня проблема с разрешением статических путей активов из пакета узлов в моем приложении Vue с Laravel в качестве бэкэнда.
У меня есть 2 проекта.
- Проект A: SPA, построенный с использованием Laravel, Vue и vue-router
- Проект B: игра Javascript ES6 (называемая Stratego), связанная с помощью веб-пакета.
Проект B упакован как локальный модуль npm, используя npm link
.
Это структура папок проекта B:
- game
webpack.config.js
- js
main.js
- dist (constructed by webpack)
package.json
stratego.js
- assets
- images
image1.svg
- assets
- images
image1.svg
Просто для пояснения, папка dist/
что входит в node_modules проекта A.
В main.js у меня есть следующий код:
import Img1 from '../assets/images/image1.svg';
Это мой слегка уменьшенный файл webpack.config.js:
...
module.exports = {
entry: './js/main.js',
context: path.resolve(__dirname),
output: {
filename: 'stratego.js',
path: path.resolve(__dirname, 'dist'),
library: 'stratego',
libraryTarget: 'umd'
},
resolve: {
extensions: ['.js']
},
module: {
rules: [
{
test: /\.js$/, // Compile all .js files with Babel
exclude: /(node_modules|bower_components)/, // Do not transform npm and bower packages, add other unwanted sources
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'] // Run all transforms
}
}
},
{
test: /\.svg$/,
use: {
loader: "url-loader",
options: {
name: '[name].[ext]',
outputPath: '/assets/images/',
}
},
},
]
},
plugins: [
new CleanWebpackPlugin(['dist']),
new GenerateJsonPlugin(
"package.json",
packagePlatformJson,
undefined,
2
)
]
};
Я хочу встроить проект B в компонент Vue в проекте A. Когда я пытаюсь сделать это с простым файловым сервером, путь к изображению правильный и загружен из dist/assets/images/img1.svg
.Однако при запуске из проекта A он разрешает путь к изображению относительно моего текущего URL.Например, когда я нахожусь в http://localhost:8000/admin
, он пытается найти изображение в http://localhost:8000/admin/assets/images/img1.svg
.
Я где-то читал, что я должен изменить свой импорт, чтобы использовать абсолютный путь, такой как
import Img1 from '/assets/images/image1.svg';
Но когда я пытаюсь это сделать, я не могу даже построить проект, так как ни одно из изображений не найдено.
Итак, мой вопрос: как мне это исправить?Как правильно связать статические файлы с моим модулем узла, чтобы у меня не было проблем с разрешением этих файлов?Возможно, мне не следует упаковать его как модуль узла и просто отбросить папки в папке моего приложения Vue?
РЕДАКТИРОВАТЬ: Мой вопрос в основном такой же, как этот: Включить ресурсы из пакета npm в комплекте webpack .Только мои ресурсы разрешаются относительно текущего URL-адреса, а не корневого.