node_modules 中 ExpressJS 的脚本路径

Posted

技术标签:

【中文标题】node_modules 中 ExpressJS 的脚本路径【英文标题】:Script path for ExpressJS in node_modules 【发布时间】:2014-08-15 08:24:01 【问题描述】:

我的“views”文件夹中有一个 index.jade。

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' )
);

当我尝试访问控制台中的翡翠文件中的 node_modules 文件夹时,我不断收到 404 错误: GET /node_modules/some_package/package_script.min.js 404 1ms - 19b

文件路径究竟是如何工作的/当我尝试访问 node_modules 中的脚本时,如何为 Express 修复它?我是否需要复制必要的 javascript 文件并将它们放在“public”下的“javascripts”文件夹下才能正常工作?

谢谢!

【问题讨论】:

你确定这是相对于index.jade的文件的正确路径吗? 【参考方案1】:

哇!等等……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')));

【讨论】:

出色的答案。有种直觉有什么不对劲。感谢您澄清 node_modules 是一个私有目录,这是一个很大的禁忌! No-no information 如果这个答案可以触及如何让 bootstrap-sass node_modules 文件干净地用于 gulp,那就太好了,即我不太愿意将一次性复制编程到 gulp 任务中以复制文件到 src 文件夹中,因此可以在每次重新编译时通过 gulp 任务获取它们,我认为我不应该习惯于手动从 node_modules 中复制文件,所以我怎样才能避免简单地为中间人使用 bower?手动将它们复制到 src/ 或者是否有更好的 gulp 方式来访问 node_modules,或者哪些 api 调用可以通过 gulp 用于 bootstrap-sass? 相关帖子,现在似乎每个人都在使用 gulp 中的 node_modules ***.com/questions/27464168/… 我希望看到最后一个命令的扩展,例如,如果我只想包含某些 node_modules 文件而不包含其他文件。

以上是关于node_modules 中 ExpressJS 的脚本路径的主要内容,如果未能解决你的问题,请参考以下文章

对 nodejs 或 expressjs 项目使用加特林?

如何在 expressjs 4.0 中设置 marko 模板引擎

开发环境-node-2

我可以将 npm node_modules 目录放在我的“webroot”之外吗

socket.io+redis+expressjs 集群 - 在 expressjs 请求中获取套接字对象

node学习系列 搭建express