Node.js babel源代码映射-无法正确调试
我正在一个大学项目中工作,正在编写后端,其中包含使用babel传输的节点js,以便使用async/await 我生成源代码映射是为了正确调试,但它做了一些相当糟糕的工作 例如,我不能在“if”或“return”语句上设置断点 我担心这只是在安装了一些额外的巴贝尔插件之后才发生的,我在试图解决一些错误时不得不安装这些插件 这是我的package.json:Node.js babel源代码映射-无法正确调试,node.js,async-await,babeljs,source-maps,babel-polyfill,Node.js,Async Await,Babeljs,Source Maps,Babel Polyfill,我正在一个大学项目中工作,正在编写后端,其中包含使用babel传输的节点js,以便使用async/await 我生成源代码映射是为了正确调试,但它做了一些相当糟糕的工作 例如,我不能在“if”或“return”语句上设置断点 我担心这只是在安装了一些额外的巴贝尔插件之后才发生的,我在试图解决一些错误时不得不安装这些插件 这是我的package.json: "axios": "^0.15.3", "babel-runtime": "^6.20.0", "body-parser": "^1.15.2
"axios": "^0.15.3",
"babel-runtime": "^6.20.0",
"body-parser": "^1.15.2",
"chai": "^3.5.0",
"chai-datetime": "^1.4.1",
"ejs": "^2.5.2",
"exceljs": "^0.2.39",
"express": "^4.14.0",
"flat": "^2.0.1",
"generator": "^1.0.1",
"hash": "^0.2.0",
"hash-generator": "^0.1.0",
"mocha": "^3.2.0",
"moment": "^2.17.1",
"mongoose": "^4.7.2",
"nodemailer": "^2.7.0",
"react": "^15.4.1",
"react-bootstrap": "^0.30.7",
"react-bootstrap-table": "^2.9.0",
"react-dom": "^15.4.1",
"react-router": "^3.0.0",
"react-uniform": "^1.2.1",
"rimraf": "^2.5.4",
"underscore": "^1.8.3",
"winston": "^2.3.0",
"winston-mongodb": "^1.6.5"
"devDependencies": {
"babel-cli": "^6.18.0",
"babel-core": "^6.21.0",
"babel-loader": "^6.2.10",
"babel-plugin-transform-runtime": "^6.15.0",
"babel-polyfill": "^6.20.0",
"babel-preset-es2015": "^6.18.0",
"babel-preset-es2016": "^6.16.0",
"babel-preset-latest": "^6.16.0",
"babel-preset-react": "^6.16.0",
"babel-preset-stage-0": "^6.16.0",
"babel-watch": "^2.0.4",
"html-webpack-plugin": "^2.24.1",
"webpack": "^1.13.3",
"webpack-dev-server": "^1.16.2"
这有点切题,但你明白了
奇怪的是,传输的js文件看起来很奇怪
var addEncouragement = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(sessionId, encouragementDetails) {
var user, encouragement, i, exist, products, res;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
logger.info('Services.Encouragement.index.addEncouragement', { 'session-id': sessionId });
_context.next = 3;
return permissions.validatePermissionForSessionId(sessionId, 'addEncouragement');
case 3:
user = _context.sent;
if (!(user != null)) {
_context.next = 29;
break;
}
encouragement = new encouragementModel();
encouragement.active = encouragementDetails.active;
encouragement.numOfProducts = encouragementDetails.numOfProducts;
encouragement.rate = encouragementDetails.rate;
//check if all the products id belongs to products
i = 0;
case 10:
if (!(i < encouragementDetails.products.length)) {
_context.next = 19;
break;
}
_context.next = 13;
return dal.getProductById(encouragementDetails.products[i]);
case 13:
exist = _context.sent;
if (!(exist == null)) {
_context.next = 16;
break;
}
return _context.abrupt('return', { 'encouragement': null, 'code': 404, 'err': 'product not found' });
case 16:
i++;
_context.next = 10;
break;
case 19:
_context.next = 21;
return dal.getProductsById(encouragementDetails);
case 21:
products = _context.sent;
encouragement.products = products;
_context.next = 25;
return dal.addEncouragement(encouragement);
case 25:
res = _context.sent;
return _context.abrupt('return', { 'encouragement': encouragement, 'code': 200, 'err': null });
case 29:
return _context.abrupt('return', { 'encouragement': null, 'code': 401, 'err': 'permission denied' });
case 30:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
如果有人能告诉我这里出了什么问题,为什么我不能正确调试,我会非常感激
谢谢不确定是否可以使用源代码映射100%地进行调试。我也有类似的问题,但从来不会引起真正的麻烦。我不知道会出什么问题。在我的例子中,我可以调试我的所有代码,但有时它有棘手的调试。例如,它将if-else包装到函数中(或者可能在两个函数中),并在
else
之后阻止它返回到if
语句的行。但事实上,它从来不会制造麻烦。有一个想法——搜索一些调试行为不好的地方,然后去源代码处将其重写为简单的javascript(没有let
const
,等等),首先,你在使用什么调试器?我在WebStorm中编写我的项目,所以我使用它的调试器
let addEncouragement = async function(sessionId, encouragementDetails) {
logger.info('Services.Encouragement.index.addEncouragement', {'session-id': sessionId});
let user = await permissions.validatePermissionForSessionId(sessionId, 'addEncouragement');
//check if to user have the permissions
if(user != null) {
let encouragement = new encouragementModel();
encouragement.active = encouragementDetails.active;
encouragement.numOfProducts = encouragementDetails.numOfProducts;
encouragement.rate = encouragementDetails.rate;
//check if all the products id belongs to products
for (let i = 0; i < encouragementDetails.products.length; i++) {
let exist = await dal.getProductById(encouragementDetails.products[i]);
if(exist == null){
return {'encouragement': null, 'code': 404, 'err': 'product not found'};
}
}
//create id object from the string id
let products = await dal.getProductsById(encouragementDetails);
encouragement.products = products;
let res = await dal.addEncouragement(encouragement);
return {'encouragement': encouragement, 'code': 200, 'err': null};
}
else{
return {'encouragement': null, 'code': 401, 'err': 'permission denied'};
}
"use strict";
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }