2014-06-24 30 views
10

我的'views'文件夾中有一個index.jade。ExpressJS在node_modules中的腳本路徑

doctype html 
html 
    head 
    title= title 
    link(rel='stylesheet', href='/stylesheets/main.css') 
    script(src='../node_modules/some_package/package_script.min.js') 

我在我的路線index.js文件夾路由器:

router.get('/', function(req, res) { 
    res.render('index', { title: 'title goes here' }) 
}); 

我不斷收到一個404錯誤,當我嘗試訪問node_modules文件夾中的文件玉在控制檯: GET /node_modules/some_package/package_script.min.js 404 1ms - 19b

文件路徑工作究竟如何/當我試圖訪問node_modules中的腳本時,如何修復它以用於Express?我是否需要複製必要的JavaScript文件,並將它們放置在'public'下的'javascripts'文件夾中以便其正常工作?

謝謝!

+0

你確定這是相對於'index.jade'文件的正確路徑嗎? – Michael

回答

14

哇!堅持... node_modules是一個私人目錄,不應該公開。默認情況下,public目錄是靜態文件的公用根路徑:

app.use(express.static(path.join(__dirname, 'public'))); 

在有一個javascripts目錄。有複製你的腳本,並在你的模板改變src屬性:

/javascripts/package_script.min.js 

如果你真的想成爲了node_modules,這將是一個壞主意,加入app.use(express.static(...));線以上下以下幾點:

app.use(express.static(path.join(__dirname, 'node_modules'))); 
+1

絕妙的答案。有一種直覺感覺出現了問題。感謝您澄清,node_modules是一個私人目錄,一個很大的禁忌! [不,沒有信息](http://stackoverflow.com/questions/24397379/script-path-for-expressjs-in-node-modules) – Bryan

+1

這將是偉大的,如果這個答案可以觸及如何得到bootstrap- sass node_modules文件可用來乾淨地吞嚥,即我不是很舒服做一次性複製編程到一個吞噬任務將文件複製到一個src文件夾,所以他們可以來源於每個重新編譯吞嚥任務,我不認爲我應該要習慣從node_modules中手動複製文件,那麼我怎樣才能避免對中間人簡單地使用bower?手動將它們複製到src /或者是否有更好的吞吐方式來訪問node_modules,或者哪些api調用可以通過gulp引導到bootstrap-sass? – blamb

+0

相關帖子,似乎每個人都從gulp運行到node_modules的這種用法現在http://stackoverflow.com/questions/27464168/how-to-include-scripts-located-inside-the-node-modules-folder – blamb