收藏
回答

线上小程序sourcemap解析输出的为什么是null?

按照这个文档操作的 https://developers.weixin.qq.com/community/develop/article/doc/0008643aa54ce81d519ad84735b413?page=1#comment-list

确认了版本是对的,写的 node 代码,返回的是 null,还有什么办法吗?Full 和 App 里的 app-service.map.map 都试过了

const fs = require("fs");
const { SourceMapConsumer } = require("source-map");


async function originalPositionFor(line, column) {
  const sourceMapFilePath = "./sourcemap/__APP__/app-service.map.map";
  const sourceMapConsumer = await new SourceMapConsumer(
    JSON.parse(fs.readFileSync(sourceMapFilePath, "utf8"))
  );


  return sourceMapConsumer.originalPositionFor({
    line,
    column,
  });
}


originalPositionFor(16879, 11266).then((res) => {
  console.log(res);
});

➜  sourcemap node index.js

{ source: null, line: null, column: null, name: null }



回答关注问题邀请回答
收藏

3 个回答

  • 工号 9527
    工号 9527
    2021-09-22

    appid 给下

    2021-09-22
    有用
    回复 8
    • windliang
      windliang
      2021-09-22
      wx77af438b3505c00e
      2021-09-22
      回复
    • commy
      commy
      2021-09-24回复windliang
      我们排查到问题的原因,但修复需要一段时间。针对你当前这个报错,你可以在 报错行号 加上 5593 后再用 sourcemap 工具去查找。
      2021-09-24
      回复
    • windliang
      windliang
      2021-09-24回复commy
      这样吗?但还是 null
      2021-09-24
      回复
    • commy
      commy
      2021-09-24回复windliang
      试试 22475, 11266 ?
      2021-09-24
      回复
    • windliang
      windliang
      2021-09-24回复commy
      这个可以👍,其他报错行数有什么规律吗
      2021-09-24
      回复
    查看更多(3)
  • Amin
    Amin
    2021-09-26

    我也遇到相同的情况,根据楼上的对话确认列号没问题,就写了个代码通过列号反向定位,我目前使用还行。通过关键字搜索锁定文件列表,再从程序推出的文件求交集查看文件,基本能锁定源代码位置。

    // npm install vlq
    const vlq = require('vlq');
    
    function analyze(sourceData/*sourceMap内容*/) {
      const source = typeof sourceData === 'string' ? JSON.parse(sourceData) : sourceData;
      const { mappings = '', sources = {} } = source;
      const lines = mappings.split(';');
      let _oLine = 0;
      let _oCol = 0;
      let _sourceIndex = 0;
      return lines.reduce((map, line, idx) => {
        if (line) {
          let _col = 0;
          map[idx] = line.split(',').reduce((info, code) => {
            let [ col, sourceIndex, oLine, oCol ] = vlq.decode(code);
            col += _col;
            oLine += _oLine;
            oCol += _oCol;
            sourceIndex += _sourceIndex;
            info[col] = {
              line: oLine,
              col: oCol,
              file: sources[sourceIndex],
            };
            _col = col;
            _oLine = oLine;
            _oCol = oCol;
            _sourceIndex = sourceIndex;
            return info;
          }, {});
        }
        return map;
      }, {});
    }
    
    function findWithCol(sourceData/* sourceMap内容 */, targetCol/* 列号 */) {
      const result = analyze(sourceData);
      const info = Object.create(null);
      Object.keys(result).forEach(line => {
        const cols = result[line];
        Object.keys(cols).forEach(col => {
          if (col === String(targetCol)) {
            const target = cols[col];
            if (!info[target.file]) {
              info[target.file] = []
            }
            info[target.file].push(`${target.line}:${target.col},编译后文件位置:${line}:${col}`);
          }
        });
      });
      return info;
    }
    
    2021-09-26
    有用 1
    回复 2
    • 鹏斌
      鹏斌
      2021-11-29
      大佬,用了您提供的代码,结果还是只能查到[Object: null prototype] {},请问有什么需要注意的地方吗?
      2021-11-29
      回复
    • Amin
      Amin
      2022-01-17回复鹏斌
      输入的是列号吧
      2022-01-17
      回复
  • Vicky
    Vicky
    2021-09-24

    我也遇到了这个问题,并且我加上了偏移量 5593 后 node解析还是null ,都是,

     { source: null, line: null, column: null, name: null }
    
    

    我的代码报错信息是:

    TypeError: Cannot read property \'XXXXX\' of null
    at https://usr/.../app-service.js:4892:28680
    at https://usr/.../app-service.js:4892:12480
    at https://usr/.../app-service.js:4853:15795
    

    试过了 10485,28680 和 10446,15795 也都还是null

    2021-09-24
    有用
    回复 1
    • Amin
      Amin
      2022-01-17
      偏移量可不一定是那个数字
      2022-01-17
      回复
登录 后发表内容