簡體   English   中英

在使用TypeScript(Newb)導入外部模塊時出現問題

[英]Problem importing external module with typescript (newb)

我是JS的新手,尤其是Typescript。 我正在使用npm 6.2.0和打字稿3.0.1。 我正在嘗試導入“文件保護程序”模塊並使用它。 它的index.d.ts看起來像這樣:

declare namespace FileSaver {
    function saveAs(data: Blob, filename?: string, disableAutoBOM?: boolean): void;
}
declare global {
    const saveAs: typeof FileSaver.saveAs;

    interface Window {
        saveAs: typeof FileSaver.saveAs;
    }
}
export = FileSaver;

當我將其導入我的代碼中(嘗試了各種方法,這是最新的方法):

import { saveAs } from 'file-saver';
// later...
saveAs(blob, 'stuff.json');

匯總給我這個錯誤:

build/js/src/ngl.js → build/js/ngl.dev.js, build/js/ngl.esm.js...
(!) Missing global variable name
Use output.globals to specify browser global variable names corresponding 
  to external modules
file-saver (guessing 'fileSaver')

而且我的代碼在瀏覽器(Chrome)中不起作用。 我在運行時得到這個:

viewer.js:915 Uncaught TypeError: Cannot read property 'saveAs' of undefined
    at Viewer.__render (viewer.js:915)
    at Viewer.render (viewer.js:947)
    at viewer.js:745

這是我的rollup.config.js (SO略有縮短):

import buble from 'rollup-plugin-buble';
import json from 'rollup-plugin-json';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';

var path = require('path');
var pkg = require('./package.json');
var external = Object.keys(pkg.dependencies);

...

export default {
  input: 'build/js/src/app.js',
  plugins: [
    resolve({
      jsnext: true,
      main: true
    }),
    commonjs({
      namedExports: {
        'node_modules/chroma-js/chroma.js': [ 'scale' ],
        'node_modules/signals/dist/signals.js': [ 'Signal' ],
        'node_modules/sprintf-js/src/sprintf.js': [ 'sprintf' ]
      }
    }),
    json(),
    buble()
  ],
  output: [
    {
      file: "build/js/app.dev.js",
      format: 'umd',
      name: 'App',
      sourcemap: true
    },
    {
      file: "build/js/app.esm.js",
      format: 'es',
      name: 'App',
      sourcemap: true
    }
  ],
  external: external
};

嘗試從rollup.config.js刪除external選項。 該選項告訴Rollup, file-saver捆綁file-saver模塊應從捆綁包中省略,因為它在目標環境中可用。 在瀏覽器中,情況並非如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM