javascript - 如何构建/部署 Angular 2 项目到生产环境?

标签 javascript node.js angular

我已经使用 Angular 2 创建了一个网站。我开始使用 Angular 2 QuickStart Guide 制作我的网站作为基础,如果我使用命令 npm start ,它就会正常工作。现在网站已经完成,我需要构建/部署(不知道正确的定义)到生产环境,以便客户端可以访问该网站。问题是:如何构建这个生产项目? (无需运行npm install)

我能找到的最好的办法是尝试 ng build -prod,但它说我的项目不是 cli 项目。如何生成独立文件以仅打开 index.html 页面并访问该网站?可能吗?

更新:

也许我并不清楚:我正在寻找的是一种获取所有 TypeScripts 文件并将其构建在准备显示的纯 HTML/JavaScript/CSS 站点中的方法。目前不需要压缩或缩小。是否可以?如果没有,还有什么其他解决方案(最好独立于主机)?

最佳答案

因此,根据我在过去几周使用 Angular2 的了解,您本质上创建的是一个客户端单页应用程序,因此您需要提供的只是包含对相应 JavaScript 文件的引用的 HTML 页面。

我一直在研究 WebPack 来打包应用程序(并且仍在正确的过程中),但是,WebPack 会将所有已编译的 typescript 文件组合成一个(或多个,仍在处理这部分)Javascript 文件同时还将对 javascript 文件的引用注入(inject)到您的 index.html 页面中。

我当前的项目使用 web pack 配置来编译 typescript 文件(使用 gulp)来配置输出 javascript 文件(main.ts -> main.js):

gulp.task("build-tsc", function() {
    return gulp.src("entry.js")
        .pipe(webpack( require("../../../webpack.config.js")))
        .pipe(gulp.dest(config.dist));
});

我的 web pack.config.js 看起来像(webpack 模块忽略了我没有 entry.js 的事实):

var HtmlWebpackPlugin = require('html-webpack-plugin');
var webpack = require('webpack');

module.exports = {
  entry: {
    "main": "./src/app/main.ts",
    "share": "./src/app/share_main.ts",
    "polyfills": "./src/app/polyfills.ts"
  },
  output: {
    path: __dirname,
    filename: "[name].js"
  },
  module: {
    loaders: [
      { test: /\.css$/, loader: "style!css" },
      { test: /\.ts$/, loader: 'ts-loader' }
    ]
  },
  resolve: {
    extensions: ['', '.js', '.ts']
  },
  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      name: ['main', 'share', 'polyfills']
    }),
    new HtmlWebpackPlugin({
      template: 'src/index.html'
    })
  ]
};

我原来的代码库是:

src/
    index.html
    assets/
        styles/
            main.scss
    app/
        app.component.ts
        app.routes.ts
        app.module.ts
        share_main.ts
        polyfills.ts
        dashboard/
            dashboard.component.ts
            dashboard.html
        navbar/
            navbar.component.ts
            navbar.html

所以我最终得到的(构建后)是一个新的 dist/目录,其中包含可供使用的文件:

dist/
    index.html
    main.js
    share.js
    polyfill.js
    app/
        dashboard/
            dashboard.html
        navbar/
            navbar.html
    styles/
        main.css

现在我正在使用 browserSync 来为开发目的提供文件,但理论上您应该能够通过 NGINX、Apache 将它们作为静态内容提供,或者通过 NGINX/Apache 将它们代理到 lite-server。

WebPack 背后的想法是,您给它一个入口点(在本例中为 main.ts),它会抓取导入语句,确保将遇到的任何内容添加到生成的 Javascript 文件中,然后将它们添加到 index.html 文件中自动。

就像我提到的,我有一个工作应用程序,但我试图更好地理解“多个入口点”,但上面的内容应该是一样的。

关于javascript - 如何构建/部署 Angular 2 项目到生产环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517405/

相关文章:

javascript - jquery循环问题

Angular 2 : custom header name is turned to lowercase

Javascript-根据 URL 的最后一个字符串动态更改背景图像

javascript - Jquery 条件高亮显示

java - 为什么 Cassandra Node js 驱动程序比 java 慢

javascript - 是否可以为 Node.js fs.readFile() 编写 Jest 单元测试?

java - 我应该如何设计一个 wordpress 后端 + react + java 前端应用程序?

javascript - 获取请求在 Angular 5 应用程序中抛出 404 错误

javascript - 如何在 Angular 4 中使用 CKEditor?

javascript - 我可以在运行时将值从 javascript 发送到 Angular Controller 吗