2017-05-04 55 views
1

我在導入語句中運行browserify時出現錯誤。我可以在沒有它的情況下捆綁它,但然後我得到類型錯誤。我有幾個文件導入類型,但是,當我嘗試運行browserify時,我得到導入Typescript @types導致browserify出錯

錯誤:無法從'/ Users/lonniemcgill/Desktop/Projects/Typescript/ssadmin/development/assets中找到模塊'chart.js'/TS /視圖

我tsconfig看起來是這樣的:

{ 
    "files": [ 
     "ts/main.ts" 
    ], 
    "compileOnSave": true, 
    "compilerOptions": { 
     "noImplicitAny": true, 
     "target": "es5", 
     "moduleResolution": "node", 
     "typeRoots": ["./node_modules/@types"], 
     "types": ["jquery", "chart.js"], 
     "sourceMap": true 
    } 
} 

和我的進口看起來像這樣:

import * as Chart from "chart.js"; 

Visual Studio代碼識別出它是一個類型,因爲INTE llisence不給我任何錯誤。沒有導入它會工作,但我得到一堆類型的錯誤。我如何才能將browserify與包含的導入語句捆綁在一起?

這是我的這個任務的代碼。

gulp.task('browserify', function() { 
    return browserify({ 
      basedir: '.', 
      debug: true, 
      entries: ['ts/main.ts'], 
      cache: {}, 
      packageCache: {} 
     }) 
     .plugin(tsify) 
     .transform(babelify, { 
      presets: ['es2015'], 
      extensions: ['.ts', '.js'] 
     }) 
     .bundle() 
     .pipe(source('bundle.js')) 
     .pipe(buffer()) 
     .pipe(sourcemaps.init({ loadMaps: true })) 
     .pipe(uglify()) 
     .pipe(sourcemaps.write('./')) 
     .pipe(gulp.dest("js/compiled")); 
}); 
+0

您是否正在通過腳本標記加載chart.js?將它作爲一個模塊加載(首選),或者創建一個'declare global'類型的填充。可能還有一些Browserify具體的方式來映射它。 –

+0

我已將所有的bower組件編譯成vendor.js文件並將其加載到腳本標記中。 –

+0

那麼這就是爲什麼 –

回答

0

由於您在價值位置使用導入(而不是單獨在類型位置),typescript不會忽略它。這意味着發出的JavaScript有import(作爲require轉錄)。

Browserify將因此嘗試從node_modules導入它。

要修正此錯誤,你有幾種選擇:

  1. 安裝chart.js之與NPM

    npm install --save chart.js  
    

    然後從你的供應商捆綁將其刪除。

    這應該是首選的方法。這是使用Browserify或Webpack等工具的主要原因之一。

  2. 爲chart.js創建一個全局聲明,以便您不必導入它。

    import chartjs = require('chart.js'); 
    declare global { 
        const Chart = chartjs; 
    } 
    

    然後刪除導入。

  3. 使用Browserify特定配置技術來告訴它,chart.js實際上映射到全局。

    這個答案說明如何:https://stackoverflow.com/a/23129051/1915893