【问题标题】:Problems setting up simple test project - Exceljs and Browserify设置简单测试项目的问题 - Exceljs 和 Browserify
【发布时间】:2017-11-23 04:42:40
【问题描述】:

我正在尝试设置一个简单的测试项目来通过浏览器应用程序测试 ExcelJS,但在我的一生中,我无法让 Browserify 正常工作。

我使用适当的 require 调用将我的代码捆绑到一个包文件中,并且在加载页面时生成的包会引发以下错误:

Uncaught TypeError: Cannot read property 'prototype' of undefined

这个错误似乎是在 fs.ReadStream 方法上引发的?

这是我的代码:

index.html

<!DOCTYPE html>
<head>
  <title>Test Excel JS</title>
  <meta charset="utf-8">
  <meta name="description" content="">

  <link rel="stylesheet" href="app.css">
</head>
<body>
  <div>
    <label>Test</label>
    <button onclick="test()">Test this Stuff and Check your console log</button>
  </div>

  <script src="bundle.js"></script>
  <script>
      var test = function(){
          var workbook = generateTestFile();
          console.log(workbook);
      };
  </script>
</body>
</html>

app.js(bundle.js 的基础)

'use strict';

var Excel = require('exceljs');

var isBold = function(dataRow){
    return dataRow.name === "Jeff";
};

var getRowColor = function(dataRow){
    return dataRow.color;
};

var getCellColor = function(dataRow, cell){
    return (dataRow.name === 'John' && cell.value === 0)? 'orange' : dataRow.color;
};

var getFont = function(isBold, color){
    return {
        name: 'Arial Black',
        color: color,
        family: 2,
        size: 14,
        bold: isBold
    };
};

var getTestHeader = function(){
    return [
        {key: "id", header: "Id"},
        {key: "name", header: "Name", width: 32},
        {key: "color", header: "Color", width: 10}
    ];
};

var getTestData = function(){
    return [
        {
            id: 0,
            name: "John",
            color: "green"
        },
        {
            id: 1,
            name: "Rehan",
            color: "blue"
        },
        {
            id: 2,
            name: "Jeff",
            color: "yellow"
        }
    ];
};

var generateTestFile = function(){
    var workbook = new Excel.Workbook();
    var worksheet = workbook.addWorksheet('Sheet 1');

    //Set Column Headers
    worksheet.columns = getTestHeader();

    //Add Rows
    var testData = getTestData();
    var length = testData.length;
    for(var i = 0; i < length; i++){
        worksheet.addRow(testData[i]);
    }

    //Format Rows
    worksheet.eachRow(function(row, rowNumber){
        console.log(row);
        var isBold = isBold(row);
        var rowColor = getRowcolor(row);
        row.eachCell(function(cell, colNumber){
            var cellColor = getCellColor(row, cell);
            console.log(cell);
        });
    });

    return workbook;
};

如何让它工作?我真正想做的就是测试excelJS。我不在乎解决方案是什么,只要我能验证该库是否有效,我就会很高兴。

【问题讨论】:

    标签: javascript html browserify require exceljs


    【解决方案1】:

    你应该浏览exceljs/dist/es5/exceljs.browser而不是exceljs

    var Excel = require('exceljs/dist/es5/exceljs.browser');
    

    由于您要浏览您的 app.js,因此您应该使您的函数(变量)在全局范围(窗口)中可见

    global.generateTestFile = function generateTestFile(){
        // ...
    };
    

    你不能同时声明一个名为isBold的变量并调用函数表达式isBold,因为你的var关键字将在当前范围内声明一个变量isBold,你的函数将不可用(请参阅var)。所以把它注释掉,因为它没有在你的代码中使用:

    //var isBold = isBold(row);
    

    另外,getRowcolor 中有一个错字。修复它:

    var rowColor = getRowСolor(row);
    

    这是给你的 gulpfile.js:

    var gulp = require('gulp');
    var source = require('vinyl-source-stream');
    var browserify = require('browserify');
    //var uglify = require('gulp-uglify');
    //var buffer = require('vinyl-buffer');
    
    gulp.task('default', function() {
      return browserify('app.js')
        .bundle()
        .pipe(source('bundle.js'))
        //.pipe(buffer())
        //.pipe(uglify())
        .pipe(gulp.dest('.'));
    });
    

    您还可以浏览 exceljs/dist/es5/exceljs.browser.js 本身并在您的应用中使用它。

    【讨论】:

    • 太好了,谢谢!也感谢所有额外的部分,让我免于处理上面的小错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多