Laravel: модули узла недоступны

#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.