2017-02-23 73 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

没有运气,仍然是同一问题 –