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;;
一括処理ファイルを作成します.
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
実行すればいいです