Rollup-plugin-typescript2: 错误:意外的令牌(axios 导入)

创建于 2018-03-19  ·  8评论  ·  资料来源: ezolenko/rollup-plugin-typescript2

[!] Error: Unexpected token
node_modules\axios\package.json (2:9)
1: {
2:   "_from": "axios",
            ^

与将 axios 导入纯 ES6 项目时相同的错误,并且没有为 rollup-plugin-node-resolve 设置 browser = true。 简单的测试用例:单个 js 文件包含

import axios from "axios";
window.process = window.process || { env: {} };
axios.get("http://httpbin.org/").then(response => console.log("Got length: " + response.data.length));

使用下面的 rollup.config.js 会产生错误,但是当排除 rollup-plugin-typescript2 时它可以工作。

版本

  • 节点:8.9.4
  • 打字稿:2.7.2
  • 汇总:0.57.1
  • 汇总插件打字稿2:0.12.0

汇总配置文件

import typescript from 'rollup-plugin-typescript2';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';

export default {
    input: 'src/main.js',
    output: {
        file: 'public/bundle.js',
        format: 'iife',
        sourcemap: true
    },
    plugins: [
        typescript(),
        resolve({ browser: true }),
        commonjs()
    ]
};

最有用的评论

查看您的测试存储库,该插件产生与 tsc 相同的输出。 您可以在.rpt2_cache/xxx/code/xxx文件中检查它——在里面寻找 json 的code属性。 这就是传递给 rollup 的内容。

2 个结果的主要区别在于import axios from 'axios';何时执行 - 在普通 js rollup 的情况下抓取axios/dist/axios.js - webpaked 构建。 在使用插件axios/lib/axios.js已解决。

Webpacked build 显然是rollup-plugin-node-resolve在浏览器模式下神奇地找到的浏览器版本。

如果您将 typescript 插件放在链的最后,rollup 使用 node-resolve 自行解析导入,并且一切都按预期工作。

您的测试仓库中的这一行:
tsPluginConf.plugins.splice(tsPluginConf.plugins.length - 1, 0, typescript());

这是我第一次看到插件顺序真的很重要:)。 我会更新自述文件。

所有8条评论

你能试试这里提出的建议吗: https :

谢谢,这似乎有效(将 rollup-plugin-json 添加为插件)!

输出与卷起相应的 .js 文件有很大不同,但 iife 签名变为

var SomeName = (function (exports,tty,util,url,http,https,assert,stream,zlib)...

我期待 rollup-plugin-typescript2 基本上使用我的 tsconfig.config 运行 tsc 作为预汇总步骤,但是当我这样做时(首先是 tsc,然后在没有 typescript 插件的情况下汇总)我得到

var SomeName = (function (exports)...

我可能在这里缺少一些配置设置..?

函数内部是否使用了那些其他参数? 两种情况下的身体是否相同?

是的,它们被使用了,还有一个额外的大块,从

 function createCommonjsModule(fn, module) {

在正文的中间(与使用纯 js 作为源相比,使用 typescript 插件时)。 很多似乎与 Node 调试功能有关。
我在这里提供了一个最小的测试用例存储库。

查看您的测试存储库,该插件产生与 tsc 相同的输出。 您可以在.rpt2_cache/xxx/code/xxx文件中检查它——在里面寻找 json 的code属性。 这就是传递给 rollup 的内容。

2 个结果的主要区别在于import axios from 'axios';何时执行 - 在普通 js rollup 的情况下抓取axios/dist/axios.js - webpaked 构建。 在使用插件axios/lib/axios.js已解决。

Webpacked build 显然是rollup-plugin-node-resolve在浏览器模式下神奇地找到的浏览器版本。

如果您将 typescript 插件放在链的最后,rollup 使用 node-resolve 自行解析导入,并且一切都按预期工作。

您的测试仓库中的这一行:
tsPluginConf.plugins.splice(tsPluginConf.plugins.length - 1, 0, typescript());

这是我第一次看到插件顺序真的很重要:)。 我会更新自述文件。

您现在可能也不需要 json 插件。

@ezolenko我真的被自述文件迷住了😬

它说:

Must be before this plugin in the plugin list, especially when browser: true option is used, see #66

我想我在想我应该把打字稿插件放在哪里,然后我读了下一行并认为this plugin指的是rollup-plugin-node-resolve

伟大的工作! 谢谢

已修复,谢谢:)

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

alireza-salemian picture alireza-salemian  ·  4评论

alexsasharegan picture alexsasharegan  ·  14评论

mikob picture mikob  ·  4评论

lijialiang picture lijialiang  ·  4评论

alshdavid picture alshdavid  ·  16评论