为什么我的angular 2应用程序不引导?

鲁尼

我正在尝试构建样板模板,以使用express,angular 2,打字稿,gulp和systemjs引导angular 2应用程序。由于某种原因,我的index.html文件无法识别我的bootstrap.js文件。我所有的jadetypescript位于src我正在使用gulp将打字稿从转换srcdist,并从node_modulesjspm_packages以快速方式提供我的静态资产但是,终于到了该调用的时候了System.import,就像这样:System.import('app').catch(console.error.bind(console)),我得到:

Error: SyntaxError: Unexpected token < Evaluating http://localhost:3000/app/bootstrap.js Error loading http://localhost:3000/app/bootstrap.js

该错误似乎是由引起的angular2-polyfills.min.js

这是我的基本快递后端,可让您大致了解如何处理我的资产和文件(我怀疑我的脑袋暂时搁置,我的路径已关闭):

const app = express();
app.use('/jspm_packages', express.static('jspm_packages'));
app.use('/node_modules', express.static('node_modules'));

app.get('*', function(req, res) {
  const file = fs.readFileSync('src/index.jade').toString();
  const html = jade.render(file);
  return res.send(html);
});

app.listen(process.env.PORT || 3000);

我的index.html文件位于dist,其中包含所有已转换的javascript的目录。这是packages我的System.config上属性:

packages: {
          "dist": {
            "main": "bootstrap",
            "format": "system",
            "defaultExtension": "js"
          }
        },

我的印象是,dist该文件夹标识相对于的文件夹BASE_URL(在我的情况下仅为/),而该main属性标识文件名。因此,我认为通过调用System.import('app'),它将在其中的app文件夹中dist查找并找到bootstrap.js用于引导我的angular2应用程序文件,但事实并非如此。当我打开chrome控制台时,它bootstrap.js没有显示在我的源代码中,因此我猜测某个地方存在路径错误,但是我尝试了所有变化,但似乎无法使其正常工作。

任何帮助将不胜感激,谢谢。

更新:

这是我的index.htmlhttps : //jsfiddle.net/r02r3jk3/这是提供内容的文件夹结构和服务器端代码:https : //jsfiddle.net/cejk0jw3/

当我检查网络标签中对的browser.js文件请求的响应angular2/platform,我得到以下信息:

请求网址是 http://localhost:3000/jspm_packages/npm/[email protected]/platform/browser.js

响应的内容类型为,Content-Type:text/html; charset=utf-8但响应为我的index.html文件:(

阿卜杜勒·拉赫曼·阿索耶(Abdulrahman Alsoghayer)

而不是appSystem.import('app')它应该是dist这样的:System.import('dist')你的包的定义应该是:

packages: {
    "dist": {
      "main": "app/bootstrap",
      "format": "system",
      "defaultExtension": "js"
    }
}

更新

既然你index.html是在同一个文件夹中appdist然后,您就不需要dist在包定义中了。

您的定义应为:

packages: {
    "app": {
      "main": "bootstrap",
      "format": "system",
      "defaultExtension": "js"
    }
}

并像这样导入:

System.import('app')

更新

我试图复制您的设置,这是我发现的问题:

在您的后端代码中:

您不提供其中的文件dist该行已被注释掉。这样,由于您的请求app/*将转发到index.htmlapp.get('*', ...)

您可以取消注释原始行:
app.use('/dist', express.static('dist'));

app.use('/app',express.static('dist/app'))

根据您执行的操作,packages对象将有所不同。

我将与后者一起去app.use('/app',express.static('dist/app'))对我来说,隐藏dist请求不只是一个原因

另外,检查SystemJS模块格式

软件包定义为:

  packages: {
    "app": {
      "main": "bootstrap",
      //"format": "system",  // this was causing the main issue 
      format:"register",
      "defaultExtension": "js"
    }
  },

最后:

System.import('app')

更新

最后一个问题是关于这条线的"angular2": "npm:[email protected]"

这是由以下两行引起的server/index.js

app.use(express.static('jspm_packages'));
app.use(express.static('node_modules'));

问题是,里面的所有内容jspm_packages,并node_modules会直接从服务器提供服务。因此,如果您尝试访问:http://localhost:3000/angular2,它将从提供node_modules
如果您尝试访问:http://localhost:3000/npm/[email protected]它将从提供jspm_packages因此,当您有台词时:

paths: {
  ...
  "npm:*": "jspm_packages/npm/*"
},
map:{
  `"angular2": "npm:[email protected]"`
}

的所有请求angular2都将翻译为:jspm_packages/npm/[email protected]但这应该是公正的/npm/[email protected]

当您将其卸下时,它可以工作,"angular2": "npm:[email protected]"因为angular2现在可以从内部使用node_modules

因此,解决方案是将您更改server/index.js为:

app.use('jspm_packages',express.static('jspm_packages'));
app.use('node_modules',express.static('node_modules'));

另外,里面的script标签index.html现在应该是:

<script src="jspm_packages/npm/[email protected]/bundles/angular2-polyfills.min.js"></script>
<script src="jspm_packages/system.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的 Angular 应用无法识别引导程序样式?

来自分类Dev

如何异步引导Angular 2应用程序

来自分类Dev

为什么我不能运行WatchOS 2应用程序?

来自分类Dev

为什么我的应用程序崩溃了?

来自分类Dev

为什么我的 Angular 应用程序将我的有效路线识别为无效?

来自分类Dev

为什么我的Ionic2应用程序始终作为Android应用程序使用?

来自分类Dev

为什么我的Ionic2应用程序始终作为Android应用程序使用?

来自分类Dev

为什么我不能构建引用内部Angular库的Angular应用程序?

来自分类Dev

为什么我的Angular应用程序的茉莉花测试失败

来自分类Dev

为什么我们将Angular应用程序包装在函数中?

来自分类Dev

[Angular,Jersey]为什么我必须使用Jersey在$ http中指定应用程序名称

来自分类Dev

为什么 RoutingModule 在我的 angular 应用程序中不起作用?

来自分类Dev

为什么我不能在 Angular 应用程序中使用 JS 文件?

来自分类Dev

使用 html 标签和引导程序时,为什么文本出现在我闪亮的应用程序中

来自分类Dev

为什么我的按钮使我的应用程序崩溃?

来自分类Dev

使用带有路由的ngUpgrade引导Angular 2 rc.6混合应用程序

来自分类Dev

angular 2 应用程序中全日历事件的引导工具提示

来自分类Dev

在 Heroku 上运行我的应用程序时,为什么会出现引导超时错误(错误 R10)?

来自分类Dev

我无法将引导程序包含到我的 Angular 应用程序中

来自分类Dev

为什么从引导加载程序跳转到应用程序之前需要更新堆栈指针

来自分类Dev

为什么[[UINavigationBar外观] setTranslucent:NO]使我的应用程序崩溃?

来自分类Dev

我的应用程序为什么不拨打电话?

来自分类Dev

为什么我的JavaFX应用程序启动这么慢?

来自分类Dev

为什么我的应用程序占用大量内存?

来自分类Dev

为什么我的PlayFramework应用程序超时很长?

来自分类Dev

为什么我的Expo应用程序不发送消息?

来自分类Dev

为什么我的Streamlit应用程序会多次打开?

来自分类Dev

为什么我的PyGame应用程序根本不运行?

来自分类Dev

为什么我的应用程序不要求确认退出?

Related 相关文章

  1. 1

    为什么我的 Angular 应用无法识别引导程序样式?

  2. 2

    如何异步引导Angular 2应用程序

  3. 3

    为什么我不能运行WatchOS 2应用程序?

  4. 4

    为什么我的应用程序崩溃了?

  5. 5

    为什么我的 Angular 应用程序将我的有效路线识别为无效?

  6. 6

    为什么我的Ionic2应用程序始终作为Android应用程序使用?

  7. 7

    为什么我的Ionic2应用程序始终作为Android应用程序使用?

  8. 8

    为什么我不能构建引用内部Angular库的Angular应用程序?

  9. 9

    为什么我的Angular应用程序的茉莉花测试失败

  10. 10

    为什么我们将Angular应用程序包装在函数中?

  11. 11

    [Angular,Jersey]为什么我必须使用Jersey在$ http中指定应用程序名称

  12. 12

    为什么 RoutingModule 在我的 angular 应用程序中不起作用?

  13. 13

    为什么我不能在 Angular 应用程序中使用 JS 文件?

  14. 14

    使用 html 标签和引导程序时,为什么文本出现在我闪亮的应用程序中

  15. 15

    为什么我的按钮使我的应用程序崩溃?

  16. 16

    使用带有路由的ngUpgrade引导Angular 2 rc.6混合应用程序

  17. 17

    angular 2 应用程序中全日历事件的引导工具提示

  18. 18

    在 Heroku 上运行我的应用程序时,为什么会出现引导超时错误(错误 R10)?

  19. 19

    我无法将引导程序包含到我的 Angular 应用程序中

  20. 20

    为什么从引导加载程序跳转到应用程序之前需要更新堆栈指针

  21. 21

    为什么[[UINavigationBar外观] setTranslucent:NO]使我的应用程序崩溃?

  22. 22

    我的应用程序为什么不拨打电话?

  23. 23

    为什么我的JavaFX应用程序启动这么慢?

  24. 24

    为什么我的应用程序占用大量内存?

  25. 25

    为什么我的PlayFramework应用程序超时很长?

  26. 26

    为什么我的Expo应用程序不发送消息?

  27. 27

    为什么我的Streamlit应用程序会多次打开?

  28. 28

    为什么我的PyGame应用程序根本不运行?

  29. 29

    为什么我的应用程序不要求确认退出?

热门标签

归档