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

nik*_*ong 5 javascript svg node.js browserify

我一直在寻找使用像SVGO这样的库来清除前端用户提交的SVG代码.SVGO是一个基于node.js的库,它通常在后端工作,所以我一直在努力探索如何从前端到后端发送SVG代码然后让清理后的代码重新启动前端.

当我试图解决这个问题时,我检查了他们的网络应用程序示例,经过检查,在链接脚本中运行代码,我通常会在前端的后端看到这些代码.特别是,他们的许多功能都有签名(完整脚本):

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

非常令人迷惑,因为这是典型的JS,我已经与后端,特别是相关的require,module.exports语法仅举几例.

  1. 这只是他们整个图书馆,SVGO,在前端吗?他们是否手动重写它以与前端兼容?或者像browserfy这样的工具是什么?
  2. 如果是这样,在前端和后端运行它有什么好处?一个人会更容易/有一些共同的指导方针可以在哪里使用?
  3. 从最初的一瞥开始,似乎在浏览器中运行SVGO库并在那里进行转换会更容易(因为我不必调用后端).那里的一般做法是什么?

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

n00*_*dl3 6

回答:

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

  2. 在发送之前在浏览器端进行一些清理会很有用(节省几KB).浏览器的优点是自由的,你不支付托管在客户端上运行的代码,一些optionnal消毒可以在浏览器中运行.但是:见3.

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