#javascript #node.js #laravel #webpack #laravel-mix
#javascript #node.js #laravel #webpack #laravel-mix
Вопрос:
В Laravel 5.7.10 я установил несколько модулей узла, но, похоже, не могу понять, как сделать их доступными для моего JS на стороне клиента. Чтобы использовать OpenLayers в качестве примера, я выполнил следующие шаги:
npm install ol --save
npm install
npm run dev
Мой package.json выглядит следующим образом:
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.18",
"bootstrap": "^4.0.0",
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^2.0",
"lodash": "^4.17.5",
"parcel-bundler": "^1.12.2",
"vue": "^2.5.7",
"ol": "^5.3.1",
"ol-popup": "^4.0.0",
"popper.js": "^1.14.7"
},
"dependencies": {
"axios": "^0.18",
"bootstrap": "^4.0.0",
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^2.0",
"lodash": "^4.17.5",
"parcel-bundler": "^1.12.2",
"vue": "^2.5.7",
"ol": "^5.3.1",
"ol-popup": "^4.0.0",
"popper.js": "^1.14.7"
}
}
У меня есть это в resources/js/app.js:
/* OpenLayers dependencies */
const pbf = require('pbf');
const pixelworks = require('pixelworks');
const rbush = require('rbush');
require('ol');
В public/js/app.js Я вижу, что туда был загружен код ядра OpenLayers.
В конце моей страницы php у меня есть следующее:
<script src="{!! asset('js/app.js') !!}"></script>
В JS на стороне клиента, который я запускаю, я использую следующую функцию, чтобы проверить, присутствует ли модуль:
function moduleAvailable(name) {
try {
require.resolve(name);
return true;
} catch(e){}
return false;
}
function checkForModule(module_name) {
if (moduleAvailable(module_name)) {
console.log("Module '" module_name "' loaded via Mix!");
} else {
console.log("Module '" module_name "' not detected");
}
}
Когда я запускаю вышеупомянутую функцию, используя ‘ol’ в качестве имя_модуля, я всегда получаю «Модуль ‘ol’ не обнаружен» — и то же самое происходит для всех других модулей, перечисленных как dev-dependencies в package.json.
Я не могу отделаться от мысли, что мне не хватает чего-то действительно простого, но после пары дней попыток разобраться в этом я просто не могу это взломать. Что еще я должен проверить?
Комментарии:
1. что делает метод moduleAvailable? Можете ли вы добавить подробности?
2. Извините за это — сейчас я добавил в код функцию moduleAvailable.