返回

织梦搬进webpack之初探angular 1.x

前端

基于webpack构建的angular1.x 工程(angular篇)

上一篇基于webpack构建的angular 1.x 工程(一)webpack篇里我们已经成功构建了整个项目的打包配置。接下来我们要继续让angular在工程里跑起来。

之前的工程由于是用gulp打包的,具体原理我不太懂,不过貌似会把所有的js自动注入到index.html中。这样做的坏处是当构建好整个项目后,你会发现index.html里面有一大堆的js,想要再加一些依赖会非常的不方便。

后来使用ng-cli构建angular工程,所有依赖的包都被自动添加到了index.html里。另外,打包后的dist目录下也有一大堆文件,有好几十个文件,绝大部分都是angular和第三方js库。虽然说ng-cli很方便,但是ng-cli毕竟是基于webpack的,那么为什么不能手写webpack的配置文件呢?这样做不是可以把控制权全部掌握在自己手里吗?

基于webpack构建的angular1.x工程相比于使用ng-cli构建的工程,最大的区别在于前者需要你自己手动去引入一些angular的js文件。

开启一个新的工程

新建一个目录,取名为ang-webpack。新建一个index.html,代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  
  <!-- AngularJS -->
  <script type="text/javascript" src="node_modules/angular/angular.min.js"></script>
  <script type="text/javascript" src="node_modules/angular-route/angular-route.min.js"></script>
  <!-- jQuery -->
  <script type="text/javascript" src="node_modules/jquery/dist/jquery.min.js"></script>
</head>
<body>
  <h1>Hello World!</h1>
  <div ng-view></div>
</body>
</html>

新建一个app.js:

(function() {
  'use strict';

  var app = angular.module('app', ['ngRoute']);

  app.config(function($routeProvider) {
    $routeProvider
      .when('/home', {
        templateUrl: 'views/home.html',
        controller: 'HomeController'
      })
      .otherwise({
        redirectTo: '/home'
      });
  });

  app.controller('HomeController', function($scope) {
    $scope.message = 'Hello World!';
  });
})();

新建一个home.html:

<h1>Home</h1>
<p>{{message}}</p>

新建一个目录views,把home.html放到views目录里。

新建一个package.json:

{
  "name": "ang-webpack",
  "version": "1.0.0",
  "description": "Angular 1.x webpack project",
  "scripts": {
    "start": "webpack-dev-server --config webpack.config.js --open",
    "build": "webpack --config webpack.config.js"
  },
  "devDependencies": {
    "angular": "^1.8.0",
    "angular-route": "^1.8.0",
    "jquery": "^3.6.0",
    "webpack": "^5.72.1",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^4.9.0"
  }
}

构建webpack.config.js

现在,我们来构建webpack.config.js:

const path = require('path');

module.exports = {
  mode: 'development',
  entry: './app.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: path.join(__dirname, 'dist'),
    compress: true,
    port: 9000
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env']
        }
      }
    ]
  }
};

安装依赖包

npm install

启动开发环境

npm start

打开浏览器,访问http://localhost:9000,你将会看到“Hello World!”。

构建生产环境

npm run build

构建完成后,你会在dist目录下看到一个bundle.js文件,把这个文件放到你的服务器上,就可以在生产环境中运行你的angular工程了。

结语

以上就是基于webpack构建angular1.x工程的全部过程。希望对大家有所帮助。