2017-05-22 40 views
4

我有一個傳統的JS文件,寫在下面RequireJS(AMD)模塊註釋:如何在Angular 4.x(Angular Cli)應用程序中導入RequireJS(AMD)模塊?

define('mymodule', [], function(){ 

    // ... bla bla bla 

    return { 
     calculate: function() { return 1 + 1; } 
    }; 
}); 

我從使用RequireJS另一個(傳統)項目導入此文件,因此 - 我不能更改使用的模塊定義

我想將其導入到用TypeScript編寫的Angular Cli(Angular 4.x)應用程序中。

由於角CLI使用的WebPack 2建設項目,支持AMD,我以爲我可以導入像這樣:

import * as MyModule from './mymodule.js'; 

...但是這不工作,它會觸發一個錯誤的mymodule.js是不是一個模塊。

任何想法(或解決方法)如何導入這個舊模塊?

回答

8

我可以加載amd模塊。

這裏是TS:

import * as MyModule from './mymodule.js'; 

console.log('my value is', MyModule.value); 

mymodule.js文件:

define(["require", "exports"], function(require, exports){ 
    exports.value = "aaa"; 
}); 

和tsconfig.js

"allowJs": true 

UPDATE:

您可以使用webpack提供的System.import。

declare var System: any; 

System.import('./mymodule.js') 
    .then(MyModule=>console.log(MyModule.value)); 
+0

當'mymodule.js'文件注入了這個'exports'和它確實工作時,公共模塊的方法(值)的定義是這樣的:'exports.value =「AAA」;'不過,我用例是不同的。我的'mymodule.js'文件有不同的邏輯。 'define'語句沒有注入'exports',它只是返回公共模塊方法(或值)。你有什麼建議,如果我可以導入它**沒有**在mymodule.js中更改邏輯/結構(不幸的是,這是我需要處理的主要需求)? –

+0

這是命名模塊,我不知道他們爲什麼不工作。嘗試執行System.import('./ mymodule.js')。然後(x => console.log(x)); –

+0

不幸的是,這也不起作用。 TypeScript錯誤:'無法找到名稱'System'' –

相關問題