私のAngularJSアプリには、多くのコントローラーjsファイルがあります。
これらのコントローラー(one.ctrl.js
、two.ctrl.js
、...
)は、index.html
ファイルに含める必要があります。
ディレクトリ構造:
app/
js/
controllers/
one.ctrl.js
two.ctrl.js
現在、上記のjs
ファイルは、次のようにindex.html
ファイルに含まれています。
index.html:
<!-- other html components -->
<script src="js/controllers/one.ctrl.js"/>
<script src="js/controllers/two.ctrl.js"/>
</body>
</html>
*.ctrl.js
に含める必要があるindex.html
ファイルがさらに増えます。
controllers
ディレクトリ内のすべての*.ctrl.js
ファイルをindex.html
に自動的に含める方法が必要です。
所見:
いくつかのSOの質問から、
AngularJSのフォルダーにJavaScriptファイルとCSSファイルを読み込む
JavaScriptファイル経由ですべてのJavaScriptファイルをディレクトリに含めるにはどうすればよいですか?
自動的に実行することはできず、サーバー側のスクリプト作成ツールまたはビルドツールが必要であることがわかりました。
私の質問:
現在、ビルドツールにyeoman
を含むgrunt
を使用しています。だから、私の質問は、ディレクトリ内のこれらのjavascriptファイルをhtmlファイルに自動的に含めることができますか?
grunt-include-source プラグインを使用できます
これを使用して、次のようなテンプレートを定義できます。
html: {
js: '<script src="{filePath}"></script>',
css: '<link rel="stylesheet" type="text/css" href="{filePath}" />',
}
あなたのソースの場所に存在するすべてのソースjsファイルとcssファイルを含むように展開されるhtmlファイルで、gruntタスクで設定できます
ソースファイルをオンデマンドでindex.htmlに追加し、自動的に grunt-include-source を使用するという一般的な質問に答えます。
これは、次のフォルダー構造用です。
_MyProject
|
+-- index.js
+-- Gruntfile.js
+-- package.json
+-- //other files
|
+--+ app
+-- //app files (.html,.js,.css,.*)
_
_npm i -D grunt-include-source grunt-contrib-watch
_でインストールします。
_Gruntfile.js
_に、grunt.loadNpmTasks('grunt-include-source');
を追加します
次に、_Gruntfile.js
_に一連のタスクを追加する必要があります。その後、次のようになります。
_module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
//...
watch: {
//...
includeSource: {
// Watch for added and deleted scripts to update index.html
files: ['app/**/*.js','app/**/*.css'],
tasks: ['includeSource'],
options: {
event: ['added', 'deleted']
}
}
},
includeSource: {
options: {
//This is the directory inside which grunt-include-source will be looking for files
basePath: 'app'
},
app: {
files: {
//Overwriting index.html
'app/index.html': 'app/index.html'
}
}
}
});
//...
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-include-source');
//...
//Include sources, run the server, open the browser, and watch.
grunt.registerTask('default', ['includeSource', 'watch']);
};
_
_index.html
_で、これを追加します(_Gruntfile.js
_で設定されたベースパス内のファイルパスは次のとおりです)。
_<!-- include: "type": "css", "files": "**/*.css" -->
<!-- /include -->
<!-- include: "type": "js", "files": "**/*.js" -->
<!-- /include -->
_
最後に、コマンドラインで:
_grunt
_
これにより、すべてのタスクが順番に開始され、JSまたはCSSが追加または削除されると、index.htmlがそれに応じて更新されます。
これは、少数のファイルで_index.html
_がどのように見えるかです。
_<!-- include: "type": "css", "files": "**/*.css" -->
<link href="styles.css" rel="stylesheet" type="text/css">
<!-- /include -->
<!-- include: "type": "js", "files": "**/*.js" -->
<script src="_routes/routes.js"></script>
<script src="scripts/app.js"></script>
<!-- /include -->
_
リンク:
次のようなものを使用できます。
(function loadScript() {
var head = document.getElementsByTagName("head")[0];
var done = false;
var directory = 'libraries/';
var extension = '.js';
var files = ['functions', 'speak', 'commands', 'wsBrowser', 'main'];
for (var file of files){
var path = directory + file + extension;
var script = document.createElement("script");
script.src = path;
script.onload = script.onreadystatechange = function() {
// attach to both events for cross browser finish detection:
if ( !done && (!this.readyState ||
this.readyState == "loaded" || this.readyState == "complete") ) {
done = true;
// cleans up a little memory:
script.onload = script.onreadystatechange = null;
// to avoid douple loading
head.removeChild(script);
}
};
head.appendChild(script);
done = false;
}
})();