javascript节点module.exports/前端的require()代码

javascript node module.exports / require() code on the front-end

我一直在研究使用 SVGO 这样的库来清理用户在前端提交的 SVG 代码。 SVGO 是一个基于 node.js 的库,通常在后端工作,所以我一直在努力思考如何将 SVG 代码从前端发送到后端,然后得到经过清理的代码在前端反刍。

正是在我试图弄清楚这一点的时候,我检查了他们的 web app example, which—upon inspection, runs code inside linked scripts that I would typically see on the back end on the front end. In particular, many of their functions have the signature (full script):

1: [function(require, module, exports) {
    "use strict";
    var loadScripts = require("./load-scripts"),
    ...
module.exports = exportedFunction;
}]

非常令人困惑,因为这通常是我与后端关联的 JS,尤其是 requiremodule.exports 语法等等。

问题

  1. 这只是他们整个前端库 SVGO 吗?他们是否手动重写它以与前端兼容?或者像 browserfy 这样的工具就是为了这个?
  2. 如果是这样,运行在前端和后端使用它有什么好处?一个是 easier/are 有一些关于在何处使用的通用准则?
  3. 乍一看,在浏览器中 运行 SVGO 库并在那里进行转换似乎更容易(因为我不必调用后端)。那里的一般做法是什么?

感谢您的任何见解。我正在努力确保以最 sense/up 符合 Web 标准的方式构建我的项目。

答案:

  1. 他们正在使用像 browserify or requirejs 这样的模块加载器来允许在浏览器中使用 commonjs 模块。这并不意味着所有的库都可以在客户端工作,例如使用节点 io 模块将不起作用。

  2. 在发送之前在浏览器端进行一些清理会很有用(节省几 kBytes)。浏览器的优点是免费,您无需为在客户端托管 运行 的代码付费,一些 optionnal 清理可以在 运行浏览器。 但是:见3.

  3. 即使客户端清理很容易,您也应该始终在后端检查和清理用户的输入,尤其是 .svg 文件,因为它们可能包含 <script>可能允许 XSS .

  4. 的标签