生成Javascript源映射,而无需在项目中添加NPM

时间:2018-09-04 13:14:04

标签: javascript jquery jquery-ui source-maps

我的Web项目提供静态网页和脚本。根本没有进行任何预处理。所有更改都在客户端中完成。

它的主页列出了其他一些页面。当用户单击链接时,jQuery-UI将加载关联的HTML页面和任何链接的Javascript / CSS文件。

这很好用,使我们可以灵活地轻松添加/删除新页面。问题是当我们要调试已加载的JS时,浏览器似乎对此一无所知。

花点时间了解一下源地图,然后发现它们都适合于Angular和React之类的框架项目。

我们不希望这个项目出现。我们可以插入并重新加载的只是基本的HTML和JS。我意识到我们可能需要运行一个外部命令来生成源映射,但是它必须是一个独立的工具-没有NPM或框架。

这是一个内部Web项目,因此安全/隐私不是问题。我们希望如果需要,客户可以查看源代码。

我知道关于JS源映射有很多问题,但是我发现的每一个问题都假设使用某些框架工具。我们没有框架,也不需要这个项目。

关于如何生成所需源地图的任何建议,或者您知道调试通过jQuery加载的简单JS的任何替代方法吗?

1 个答案:

答案 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

 nodemon gen-map.sh

entr

 entr gen-map.sh