commonJS 未対応 version の Angular.js でも browserify したい
あらすじ
Angular.js 1.4 が CommonJS に対応してきたので require したくなりました。 なんですが既存の app の Anugluar.js が 1.3.x だった場合はどうすればいい?
まずは 1.4 から試す
% mkdir angular-browserify-sample && cd $_ % npm init -f % npm install angular@1.4.0 % npm install browserify
browserify にパスを通す。以下は direnv を使った例。素直にnpm -g install browserifyとしてもよい
% echo 'export PATH=node_modules/.bin:${PATH}' > .envrc
% direnv allow
サンプルコードを作成
% mkdir app % touch app/app.js app/index.html
app/app.js を以下の通りにする
% cat app/app.js
var angular = require('angular');
angular.module('app', []).controller('AppController', function($scope) {
$scope.message = 'Hello, World!';
});
変換
% browserify app/app.js > app/bundle.js
html を用意
% cat app/index.html
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8">
<title>AngularJS 1.4 を試す</title>
</head>
<body ng-controller="AppController">
{{ message }}
<script src="bundle.js"></script>
</body>
</html>
ブラウザで Hello, World! を確認します。
% open app/index.html
※変換処理は grunt や glup などで自動化しますがこの記事では説明を割愛します。
1.3 でできるだろうか
angular@1.4.0 を削除
% npm uninstall angular unbuild angular@1.4.0
代わりに angular@1.3.16 を準備
% npm install angular@1.3.16 --save % npm install browserify-shim --save
package.json を修正
% git diff
diff --git a/package.json b/package.json
index 570cd39..0a74280 100644
--- a/package.json
+++ b/package.json
@@ -12,5 +12,13 @@
"dependencies": {
"angular": "^1.3.16",
"browserify-shim": "^3.8.8"
+ },
+ "browserify": {
+ "transform": [
+ "browserify-shim"
+ ]
+ },
+ "browser": {
+ "angular": "./node_modules/angular/angular.js"
+ },
+ "browserify-shim": {
+ "angular": {
+ "exports": "angular"
+ }
}
}
変換して確認。
% browserify app/app.js > app/bundle.js % open app/index.html
無事 angular@1.3.16 でも require できた。 commonJS の require に対応していないモジュールでも browserify-shim 使えば何とかなるようです。
SEE ALSO
AngularJS 1.4 と Browserify を組み合わせて試してみる | スマホ神 – JavaScript 受託開発 –