我的Web项目提供静态网页和脚本。根本没有进行任何预处理。所有更改都在客户端中完成。
它的主页列出了其他一些页面。当用户单击链接时,jQuery-UI将加载关联的HTML页面和任何链接的Javascript / CSS文件。
这很好用,使我们可以灵活地轻松添加/删除新页面。问题是当我们要调试已加载的JS时,浏览器似乎对此一无所知。
花点时间了解一下源地图,然后发现它们都适合于Angular和React之类的框架项目。
我们不希望这个项目出现。我们可以插入并重新加载的只是基本的HTML和JS。我意识到我们可能需要运行一个外部命令来生成源映射,但是它必须是一个独立的工具-没有NPM或框架。
这是一个内部Web项目,因此安全/隐私不是问题。我们希望如果需要,客户可以查看源代码。
我知道关于JS源映射有很多问题,但是我发现的每一个问题都假设使用某些框架工具。我们没有框架,也不需要这个项目。
关于如何生成所需源地图的任何建议,或者您知道调试通过jQuery加载的简单JS的任何替代方法吗?
答案 0 :(得分:0)
首先,您无需使用Angular / React即可使源地图正常工作。这些只是一个普通的用例。
第二,NPM正是它所说的;包裹经理。所以您也不需要NPM。
您需要是一个构建过程。您已经很清楚,您不想缩小js,但确实想要源地图。这是用于调试js的常用配置,通常是通过在禁用所有优化的情况下“构建”或“丑化”代码来实现的。
如果您愿意使用Closure Compiler,则可以完全避免使用NPM,但这是一罐蠕虫,我建议您避免使用。
相反,我建议在NPM中使用全局安装Uglify **(每台开发机)。这是“每台机器一次”的步骤。
npm install uglify-js -g
*:希望这一步满足您的无NPM要求。我确实做了直接克隆Uglify存储库的实验,但是即使那样,您仍然需要运行它,并且至少要使用NPM安装它的依赖项。我很想证明自己对此有错,但我认为这与这篇文章无关。
然后使用该脚本编写构建脚本。我试图在这里为您收集零件:
文件: gen-map.sh
#!/usr/bin/env bash
uglifyjs file1.js --config-file gen-map.json \
-o file1.min.js \
--source-map "root='http://foo.com/src',url='file1.min.js.map'"
cat file1.min.js
文件: gen-map.json
{
"compress": false,
"output": {
"beautify": true
},
"sourceMap": {
"content": "content from file1.js.map",
"url": "file1.js.map"
}
}
文件: file1.js
var b = function() {
console.log('b');
};
function c() {
console.log('c');
};
console.log('a');
b();
c();
(function() {
console.log('d');
})();
文件: file1.min.js
var b = function() {
console.log("b");
};
function c() {
console.log("c");
}
console.log("a");
b();
c();
(function() {
console.log("d");
})();
//# sourceMappingURL=file1.min.js.map
文件: file1.min.js.map
{"version":3,"sources":["file1.js"],"names":["b","console","log","c"],"mappings":"AAAA,IAAIA,IAAI;IACNC,QAAQC,IAAI;;;AAGd,SAASC;IACPF,QAAQC,IAAI;;;AAGdD,QAAQC,IAAI;;AACZF;;AACAG;;CACA;IACEF,QAAQC,IAAI;EADd","sourceRoot":"http://foo.com/src"}
*:如果您使用的是ES6功能,则为Uglify-es。
之后,剩下要做的就是更新路径,文件名和实际的脚本标签。使用此配置,您仍然仍然必须提供min.js文件,尽管看起来manually tagging的JS文件指向地图可能会起作用...
使用此配置,您需要通过运行以下命令使构建的文件保持最新状态:
./gen-map.sh
使用npm和gulp这样做会更简单,但是,如果您不介意其他软件包,我建议您使用2个通用的“文件已更改观察者”;
nodemon gen-map.sh
entr gen-map.sh