Не удается найти статические активы из модуля express / npm - PullRequest
0 голосов
/ 20 января 2019

tldr;

Мой проект - это модуль NPM, который используется сервером ExpressJS. Сервер должен указать конечную точку, а мой модуль сделает все остальное. Как заставить мой модуль загрузить правильную HTML-страницу и получить правильные файлы js / css с правильного пути?

Проблема

Я сталкиваюсь с проблемой, когда вижу структуру каталогов сайта, используя библиотеку serveIndex , и все файлы находятся в правильных каталогах, но по какой-то причине, когда я пытаюсь загрузить любой из файлов, будь то из представления serveIndex или из фактической конечной точки, куда он должен загружаться, я получаю только 404 ошибки.

Вот пример, если кто-то хотел использовать этот модуль NPM из своего проекта.

app.js (их сервер)

const express = require('express')
const { adminAreaConfig } = require('express-admin-area')

const app = express()
const adminArea = adminAreaConfig(express)  // my module being passed the "express" library

app.use('/admin', adminArea)  // specify a URL to use my module

app.listen(3000, () => console.log('\n\nServer Online\n\n'))

Вот изображение структуры каталогов моих проектов после того, как она была построена.

enter image description here

Отходя от console.log(__dirname), который возвращает <long path string>/express-admin-area/build/src, я затем говорю своему модулю, используя ссылку express, переданную фактическим сервером в приведенном выше коде, искать в каталоге views с

... import libraries etc ...

const adminAreaConfig = express => {
  const adminArea = express.Router()

  adminArea.use('/', express.static(__dirname + '/views')  // sets my modules views to the "http://localhost:3000/admin" path
  adminArea.use('/dirs', serveIndex(__dirname))  // will get into this later

... some other stuff like exports etc ...

Затем выполняется попытка загрузки файла index.html в каталог express-admin-area/build/src/views, но происходит сбой, поскольку он не может найти файлы CSS и JS внутри express-admin-area/build/src/views/static/css или .../js.

Во-первых, я знаю, что это не помогает, потому что вместо поиска http://localhost:3000/admin/static/css/styles.css он ищет http://localhost:3000/static/css/styles.css, так что это еще одна проблема, которую мне нужно полностью решить.

Во-вторых, оглядываясь на небольшой пример кода выше, adminArea.use('/dirs', serveIndex(__dirname)), я использую библиотеку serveIndex в попытке просмотреть структуру каталогов. Если я перехожу на http://localhost:3000/admin/dirs, я получаю правильные каталоги и файлы в браузере

enter image description here

Но теперь, если я пытаюсь просмотреть фактический файл, я сталкиваюсь с ошибкой Cannot GET /admin/dir/main.js, например, если мне нужно перейти к http://localhost:3000/admin/dir/main.js, но я могу продолжить углубляться в каталоги, если я хотел, например, controllers или routes каталоги с изображения.

Что я хочу

Мне нужен способ загрузить эти статические ресурсы. Если я указываю свой модуль на простую HTML-страницу с простым <h1>Hello, World!</h1>, то это то, что я получу, но попытка загрузить любые внешние скрипты / таблицы стилей - это когда я получаю 404 ошибки и ничего не загружается.

1 Ответ

0 голосов
/ 20 января 2019

Я отвечу на свой вопрос.

Решение на самом деле довольно простое. Уровень представления этого модуля обрабатывается React, CRA, если быть точным. CRA будет искать некоторые специфические переменные среды, одной из которых будет PUBLIC_URL. Все, что мне нужно было сделать, это

  • Создайте файл .env в корневом каталоге моего CRA
  • добавить PUBLIC_URL="/admin"

После этого он просто перестраивает проект yarn build и перезагружает сервер. CRA тогда будет искать http://localhost:3000/admin/static/... вместо http://localhost:3000/static/... для статических активов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...