2016-08-12 2 views
0

Я пытаюсь использовать webpack для создания файла bundle.js для модуля узла. Файл bundle.js будет использоваться в браузере клиента.Webpack + Express: Как обслуживать статические ресурсы в/node_modules с сервера

В этом случае проект имеет некоторые зависимости, которые используют статические файлы в каталоге node_modules. Например, путь одного из статического файла

/node_modules/node-pogo-signature/lib/proto/Signature.proto

Когда я пытаюсь запустить файл bundle.js в браузере, я получаю эту ошибку

GET http://localhost:3000/proto/Signature.proto 404 (Not Found) 

Если я скопировать файл Signature.proto в мою/общедоступную папку, пакет затем найдет его. Тем не менее, ручное копирование статических файлов из/node_modules в/public может быть утомительным и трудноподдерживаемым. Есть ли лучший способ сделать это?

ответ

1
var myfile = require('./node_modules/node-pogo-signature/lib/proto/Signature.proto'); 

Затем вы можете добавить его в маршрут, например, если вы используете выразить это, как вы можете отобразить содержимое файла package.json:

// create a new express server 
      var express  = require('express'); // We use express as web server http://expressjs.com 
      var app = express(); 
      // serve the files out of ./public as our main files 
       app.use(express.static(__dirname + '/public')); 
      // start server on the specified port and binding host 
      app.listen(appEnv.port, '0.0.0.0', function() { 
      console.log("server started"); 
      }); 

// Shows content of package.json 
var myfile = require('./package.json'); 

app.get('/showfile', function (req, res){ 
    if (debug) { 
     console.log("showfile received a request"); 
    }; 
    res.send(myfile); 
}); 

Вы просто должны добавить/showfile в в конце URL-адреса, например: http://localhost:6006/showfile

+0

В этом случае, если мне нужно добавить, скажем 5 файлов, то я создаю 5 vars для их путей и поставлю res.send (myfile1), res.send (myfile2), res.send (myfile3), res.send (myfile4), res.send (myfile5) в функцию обратного вызова app.get? –

+0

Для первой части, да, вы можете загрузить каждый файл в отдельный var. Избегайте добавления нескольких 'res.send()' к одному маршруту. Вы можете объединить файлы в одну строку и отправить как 'res.send (concatenated)' . Лучшим решением было бы определить отдельный путь для каждого из файлов, чтобы вы могли использовать другой URL-адрес, чтобы получить доступ к каждому файлу. – Netsmile

Смежные вопросы