nodejsは対象を文字列コードに変換し、文字列コードを動的に実行し、requirejsはr.jsを使って包装する時にプロファイルを動的に生成します.

5232 ワード

nodejsは対象を文字列コードに変換し、文字列コードを動的に実行し、requirejsはr.jsを使って包装する時にプロファイルを動的に生成します.
var
 パス 
を選択します.
 require('path')
var
 fs 
を選択します.
 require('fs')
var
 vm 
を選択します.
 require('vm')
var
 オズ 
を選択します.
 require('os')
/*
* * インデントの数を書式設定します. 
*/
機能
 toIndent(indent) {    
var
 s 
を選択します.
 []    
for
 (
var
 i 
を選択します.
 
0
; i 
<>
 indent; i
++
) {        s.push('\t');    }     
return
 s.join(');
/*
* * 配列オブジェクトを元の文字列に変換 
*/
機能
 array 2 string(arr、 indent {    
var
 s 
を選択します.
 ['[] os.EOL) has Prop 
を選択します.
 
false
;    
for
 (
var
 i 
を選択します.
 
0
; i 
<>
 arr.length i
++
) {        
if
 (
!
has Prop) {            has Prop 
を選択します.
 
true
;        }         s.push(toIndent) 

 
1
)[形        
var
 アイテム 
を選択します.
 arr[i];        
var
 itement p 
を選択します.
 
typeof
(アイテム)        
if
 (itement p 
==
 'object {            
if
 (アイテム 
instance of
 Aray {                s.push(array 2 string(item) indent 

 
1
)[形            } 
else
 {                s.splice(s.length) 
を選択します.
 
2
を選択します. 
2
)0                s.push(object 2 strang(item) indent.trim();            }         } 
else
 {            s.push(JSON.strigify(item)        }         s.push(');        s.push(os.EOL)    }     
if
 (has Prop) {        s.splice(s.length) 
を選択します.
 
2
を選択します. 
1
)0    }     s.push(toIndent)    s.push(');    
return
 s.join(');
/*
* * オブジェクトを元の文字列に変換 
*/
機能
 object 2 sting(obj、 indent {    
var
 s 
を選択します.
 ['{} os.EOL) has Prop 
を選択します.
 
false
;    
for
 (
var
 o 
in
 OB {        
if
 (
!
has Prop) {            has Prop 
を選択します.
 
true
;        }         s.push(toIndent) 

 
1
)[形        s.push(JSON.strigify(o);        s.push(');        
var
 tp 
を選択します.
 
typeof
(obj[o])        
if
 (tp 
==
 'object {            
if
 (obj[o] 
instance of
 Aray {                s.push(array 2 string(obj[o] indent 

 
1
)[形            } 
else
 {                s.push(object 2 strang(obj[o] indent 

 
1
)[形            }         } 
else
 
if
 (tp 
==
 '
機能
') {            s.push(obj[o].toString();        } 
else
 {            s.push(JSON.strigify(obj[o])        }         s.push(');        s.push(os.EOL)    }     
if
 (has Prop) {        s.splice(s.length) 
を選択します.
 
2
を選択します. 
1
)0    }     s.push(toIndent)    s.push(');    
return
 s.join(');
//
正式コードの中のrequirejsの構成文字列を抽出して、jsonオブジェクトに変換します. 修正に関する値情報は下の梱包操作のために準備します. また設定情報を文字列にして仮ファイルに書きます.
var
 manPath 
を選択します.
 path.resove(process.cwd()、 '..
を選択します.
js
を選択します.
main.js;;
var
 メインコンテント 
を選択します.
 fs.readFileSync(manPath) 'utf
を選択します.
8
')replace(
を選択します.
(requirejs\.config\()
?
([
^
)[形]

)(\);)
?/
gm '$
2
');vm.run InThisContext('
var
 manCfg
を選択します.
 ' 

 メインコンテント
//
抽出した文字列をmanCfgオブジェクトに変換します.
メインCfg.baseUrl 
を選択します.
 '
を選択します.
static
を選択します.
js
を選択します.
dist
を選択します.
lib;
var
 nMainCfg Str 
を選択します.
 'requirejs.co nfig(' 

 object 2 sting(manCfg) 
0


 ');';
//
メール.jsプロファイルを再生成し、下のパッケージの準備をします.
var
 buildPath 
を選択します.
 path.resove(process.cwd()、 '.
を選択します.
main.js';fs.writeFileSync(buildPath) nMainCfg Str;consolie.log('write) temp file mail.js fininshed;;
//
パッケージの設定情報
var
 buildJson 
を選択します.
 {    appDir: '..
を選択します.
js    baseUrl: 'lib    manConfigFile: '.
を選択します.
main.js'は、    dir: '..
を選択します.
js
を選択します.
dist    modules: [{        'name': '..
を選択します.
メーン        include: []    }] };
for
 (
var
 p 
in
 manCfg.paths) {
//
ここですべての依存モジュールを抽出して、梱包する時はmain.jsファイルの下に置いてください.
    buildJson.modules[
0
]include.push(p);
var
 buildPath 
を選択します.
 path.resove(process.cwd()、 '.
を選択します.
buildumain.json';fs.writeFileSync(buildPath) object 2 sting(buildJson) 
0
)[形
//
パッケージ設定ファイルを生成
consolone.log('wirte) temp file buildumain.json fininshed;;
一括処理ファイルを作成します.
@echo off
node build.js
node r.js -o build_main.json
@pause
実行すればいいです