"TypeError: callback is not a function" after upgrading to stencil 1.12.0

"TypeError: callback is not a function" after upgrading to stencil 1.12.0

我刚刚升级到最新版本的 stencil-cli,现在每次编辑或只是打开任何模板文件时都会出错。我从 1.8 版升级 运行:

npm install -g @bigcommerce/stencil-cli

安装新版本后,我运行stencil start,一切正常。

然后,我打开了一个模板文件进行编辑vi templates/components/common/header.html。一旦文件打开,stencil-cli 输出以下错误,并关闭:

/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:26
            return callback(err);
                   ^

TypeError: callback is not a function
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:26:20
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:91:20
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:421:16
    at iteratorCallback (/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:998:13)
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:906:16
    at ReadFileContext.callback (/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:112:24)
    at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:303:13)

每次打开或编辑模板文件时都会出现这种情况。当我编辑 sass 文件时似乎没有发生。到目前为止,我只在 templates/ 目录中的 editing/opening/saving 内容时看到它。

我是 运行 节点 v4.2.1 以防万一。

知道为什么会突然发生这种情况吗?最新版本是否存在某种错误?

更新

按照评论中的建议添加日志语句后,现在完整的输出是:

[Error: The following template(s) are/is missing:
function (err, v) {
            results[index] = v;
            callback(err);
        }]
/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:27
            return callback(err);
                   ^

TypeError: callback is not a function
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:27:20
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:92:20
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:421:16
    at iteratorCallback (/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:998:13)
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:906:16
    at ReadFileContext.callback (/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:113:24)
    at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:303:13)

更新

根据评论添加额外的调试后,这是新的输出。有一长串类似这样的重复序列:

layout/base function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
layout/empty function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
components/carousel function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
components/account/add-wishlist function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
components/account/address-list function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
components/account/edit-account function (err, v) {
            results[index] = v;
            callback(err);
        } undefined

这将持续数百行,然后以以下内容结束:

pages/account/orders/completed function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
pages/account/orders/invoice function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
pages/account/orders/details function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
pages/custom/page/narrow-page function (err, v) {
            results[index] = v;
            callback(err);
        } undefined
{ [Error: ENOENT: no such file or directory, open 'layout/base/function (err, v) {
            results[index] = v;
            callback(err);
        }.html']
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: 'layout/base/function (err, v) {\n            results[index] = v;\n            callback(err);\n        }.html' }
/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:27
            return callback(err);
                   ^

TypeError: callback is not a function
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:27:20
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:92:20
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:421:16
    at iteratorCallback (/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:998:13)
    at /Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/node_modules/async/dist/async.js:906:16
    at ReadFileContext.callback (/Users/myusername/.nvm/versions/node/v4.2.1/lib/node_modules/@bigcommerce/stencil-cli/lib/template-assembler.js:113:24)
    at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:303:13)

此问题已通过 https://github.com/bigcommerce/stencil-cli/pull/319

解决

感谢您的快速报告!