2017-02-23 35 views
2

我使用下面兩個不同的代碼來導入文件運行時,其中一個工作正常,而另一個拋出錯誤。Angular 2:System.import():不能使用完整路徑

工作:

System.import('../../FileName.ts').then(classObj => {   
     console.log(classObj);    
}); 

不工作:

System.import('App/Models/FileName.ts').then(classObj => {   
     console.log(classObj);    
}); 

它拋出以下錯誤:

找不到模塊「應用程序/模型/ FileName.ts '

文件結構其中代碼被寫入,我也試圖從相同的結構導入的文件:

(1)代號:ActivityModel.ts (2)導入:ApplicationModel.ts

enter image description here

任何人都可以幫助我解決以上全路徑對價問題。

+0

好像你的FileName.ts在2文件夾之外,所以絕對路徑(App/Models/FileName.ts)不起作用。你需要提供相對路徑(../../FileName.ts)。 –

+0

我知道,但在動態,不是預定義的文件路徑,它可以是任何文件夾中的任何文件,所以我有完整的路徑。 –

+0

你可以試試''。/ App/Models/FileName''' –

回答

7

首先,請確保您有最新版本的WebPack installed.Then你可以用以下更改嘗試的:

webpack.config.js文件更改下面的一段代碼,

resolve: { 
     extensions: ['.ts', '.js', 'css'], 
     "modules": [ 
      "./node_modules", 
      "content" 
     ] 
    }, 

output: { 
      path: path.resolve(__dirname, 'dist'), 
      filename: '[name].js', 
      publicPath: 'dist/', 
     } 

.ts文件的更改,

System.import('horizontal/models/FileName.ts').then(classObj => {   
     console.log(classObj);    
}); 
  • resolver用於加載相對於該應用根目錄的文件和通過 解決如上所示可以通過絕對路徑訪問該文件夾 內webpack.config.jscontent文件夾,文件。

    (現在,像content/horizontal/models/FileName.ts路徑將無法正常工作)

  • FileName.ts束文件將在dist文件夾中創建和 將在瀏覽器中加載dynamically.Webpack會拋出一個錯誤 在瀏覽器,那它cannot load chunk 0什麼的。這是 ,因爲它試圖加載其他文件相對於您的HTML 文件而不是相對於您通過 腳本標記加載的第一個JavaScript文件。

    要遷移這個,你必須添加一個publicPath到你的Webpack 配置。

希望,它會幫助!

+0

謝謝,它適用於我 –

0

添加到您的tsconfig

"baseUrl": "." 

更換 「」用描述在哪裏找到導入的基礎文件夾的路徑。在我的情況下,tsconfig與我的應用程序文件夾位於同一個文件夾中,所以我只是將它設置爲「。」。

+0

沒有運氣,仍然是同一問題 –