Electron: "λͺ¨λ“ˆ"이 μ •μ˜λ˜μ–΄ μžˆμœΌλ―€λ‘œ jQueryκ°€ μ „μ—­μ μœΌλ‘œ μ„€μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2014λ…„ 05μ›” 06일  Β·  71μ½”λ©˜νŠΈ  Β·  좜처: electron/electron

jQueryμ—λŠ” λ‹€μŒκ³Ό 같은 λ‚΄μš©μ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

if ( typeof module === "object" && typeof module.exports === "object" ) {
  // set jQuery in `module`
} else {
  // set jQuery in `window`
}

λͺ¨λ“ˆμ€ λΈŒλΌμš°μ € μΈ‘ μŠ€ν¬λ¦½νŠΈμ—μ„œλ„ μ •μ˜λ©λ‹ˆλ‹€. 이둜 인해 jQueryλŠ” window 개체λ₯Ό λ¬΄μ‹œν•˜κ³  module λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ λ‹€λ₯Έ μŠ€ν¬λ¦½νŠΈλŠ” μ „μ—­ λ²”μœ„μ—μ„œ $ λ˜λŠ” jQuery λ₯Ό 찾지 λͺ»ν•©λ‹ˆλ‹€.

이것이 jQuery λ˜λŠ” atom-shell 버그인지 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ 웹에 올리고 μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‹€λ₯Έ μ‚¬λžŒλ“€μ€ λ‚΄κ°€ ν•œ λ™μ•ˆ κ²€μƒ‰ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

module 섀정을 ν•΄μ œν•˜λ©΄ λ©λ‹ˆλ‹€.

λ‚΄ μ›Ή νŽ˜μ΄μ§€κ°€ λΈŒλΌμš°μ €μ™€ μ „μž λͺ¨λ‘μ—μ„œ μž‘λ™ν•˜λ„λ‘ ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€.
이 κΈ€μ—μ„œ μ„€λͺ…ν•œ 바와 같이, μ „μžλ“€μ€ 곡개 κΈ€λ‘œλ²Œ module 경우 nodeIntegration: true JQuery와 그에 따라보고 λ°˜μ‘ν•˜μ—¬ :

if ( typeof module === "object" && typeof module.exports === "object" ) {
    // bind to module
} else {
    // bind to window
}

jQueryλ₯Ό window κ°œμ²΄μ— λ°”μΈλ”©ν•˜κ³  html νŒŒμΌμ—μ„œ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ—¬ nodeIntegration: true λ₯Ό μ‚¬μš©ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="//code.highcharts.com/highcharts.js"></script>
<script>if (window.module) module = window.module;</script>

이것이 λˆ„κ΅°κ°€λ₯Ό 돕기λ₯Ό λ°”λžλ‹ˆλ‹€.

λͺ¨λ“  71 λŒ“κΈ€

이것은 μ‹€μ œλ‘œ 두 μ‹œμŠ€ν…œμ˜ 버그가 μ•„λ‹ˆλ©° browserifyλ₯Ό μ‚¬μš©ν•  λ•Œλ„ λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. jQueryλŠ” CommonJS ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜λŠ” 것을 ν™•μΈν•˜κ³  κ·ΈλŒ€λ‘œ μ‚¬μš©λ˜κΈ°λ₯Ό κΈ°λŒ€ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ ν•΄κ²° 방법은 비ꡐ적 κ°„λ‹¨ν•©λ‹ˆλ‹€. jQueryλ₯Ό 슀크립트 νƒœκ·Έλ‘œ λ‘œλ“œν•˜λŠ” λŒ€μ‹  requireλ₯Ό 톡해 λ‘œλ“œν•˜μ‹­μ‹œμ˜€.

window.$ = window.jQuery = require('/path/to/jquery');

@ChiperSoft 에 λ™μ˜ν•©λ‹ˆλ‹€. μ΄λŠ” CommonJS ν™˜κ²½μ—μ„œ μ˜ˆμƒλ˜λŠ” λ™μž‘μ΄λ―€λ‘œ wontfix . 그리고 λ°œκ²¬ν•œ λ‚΄μš©μ„ κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

@ChiperSoft , require('jquery') μž‘λ™ν•˜λ €λ©΄ jquery.js νŒŒμΌμ„ 어디에 λ„£μ–΄μ•Ό ν•˜λ‚˜μš”? package.js 및 main.js 와 같은 μˆ˜μ€€μ— λ‘λ €κ³ ν–ˆμ§€λ§Œ λŸ°νƒ€μž„μ—μ„œ μ„ νƒν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

require('jquery.js') λ₯Ό μ‚¬μš©ν•˜μ—¬ 끝에 .jsλ₯Ό κΈ°λ‘ν•˜μ—¬ HTML 파일과 κ΄€λ ¨λœ jqueryλ₯Ό λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ£„μ†‘ν•©λ‹ˆλ‹€. μ–ΈκΈ‰ν•œ λŒ€λ‘œ window.$ = window.jQuery = require('/path/to/jquery'); λ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
Uncaught Error: Cannot find module 'scripts/jquery-1.10.2.min.js' module.js:339

λ‚˜λŠ” 항상 그것을 μ‚¬μš©ν•˜κ³  ν›Œλ₯­ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€! λ‚΄κ°€ μ‚¬μš©ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

window.$ = window.jQuery = require('./scripts/jquery-2.1.1.min.js');

@frankhale 였, ./ 와 ν•¨κ»˜ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

μ—„μ²­λ‚œ! 경둜 λ¬Έμ œλ„ μ €λ₯Ό λ„˜μ–΄λœ¨λ ΈμŠ΅λ‹ˆλ‹€.

앱에 λ…Έλ“œ 톡합이 ν•„μš”ν•˜μ§€ μ•Šμ€ 경우 BrowserWindow μ˜΅μ…˜μ— "node-integration": false λ₯Ό μΆ”κ°€ν•˜μ‹­μ‹œμ˜€. 이 경우 module.exports λ₯Ό μ‚¬μš©ν•  수 μ—†μœΌλ©° jQueryλŠ” μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

@kabalage λŠ” ν›Œλ₯­ν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

:+1:

같은 문제둜 κ±Έμ–΄κ°”μŠ΅λ‹ˆλ‹€. NPM을 톡해 jQueryλ₯Ό μ„€μΉ˜ν•œ λ‹€μŒ ν•„μš”ν•˜κ³  μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

requireκ°€ μ—†λŠ” λ…Έλ“œ μ •μˆ˜ν™” 및 jqueryκ°€ ν•„μš”ν•œ 경우...

λ‚˜λŠ” 이것이 λ‚΄κ°€ μ‚¬μš©ν•  μˆ˜μžˆλŠ” 것 κ°™κΈ° λ•Œλ¬Έμ— 이것을 μ΄ν•΄ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ–Έμ œ $λ₯Ό μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. 이 쀄 λ°”λ‘œ 뒀에 $λ₯Ό κΈ°λ‘ν•˜λ©΄ requireκ°€ λΉ„λ™κΈ°μ‹μ΄λ―€λ‘œ jqueryκ°€ μ•„λ‹Œ requireκ°€ 될 κ²ƒμž…λ‹ˆλ‹€.

window.$ = window.jQuery = require('/경둜/λŒ€μƒ/jquery');
console.log($) // 'jQuery'κ°€ μ•„λ‹Œ 'require'λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.

@dieroux npm을 톡해

npm install jquery

이것은 같은 것을 μ‹œλ„ν•˜λŠ” λ™μ•ˆ λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ 경둜λ₯Ό μ œκ³΅ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 λ§ν•˜λ©΄ λ©λ‹ˆλ‹€.

window.$ = window.jQuery = require('jquery');
console.log( [$, jQuery ]);

λ…Έλ“œ 톡합이 ν•„μš”ν•˜κ³  require('something') 을 μ‚¬μš©ν•  수 μ—†λ‹€λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?
ν˜„μž¬ "λͺ¨λ“ˆ μ‚­μ œ"λ₯Ό μˆ˜ν–‰ν•˜μ—¬ μž‘λ™ν•©λ‹ˆλ‹€. 문제λ₯Ό λ‘œλ“œν•˜κΈ° 전에.
μ΄λ ‡κ²Œ ν•˜λ©΄ μ–΄λ–€ 영ν–₯이 μžˆμŠ΅λ‹ˆκΉŒ?

webview의 사전 λ‘œλ“œ μŠ€ν¬λ¦½νŠΈμ—μ„œ jqueryκ°€ 처음 ν•„μš”ν•  λ•Œ jqueryλ₯Ό μ˜¬λ°”λ₯΄κ²Œ λ‘œλ“œν•  수 μžˆλŠ” μœ μ‚¬ν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ jqueryκ°€ μ™ΈλΆ€ νŽ˜μ΄μ§€μ—μ„œ 두 번째둜 참쑰될 λ•Œ λ‹€μŒμ„ 톡해 ν• λ‹Ήν•©λ‹ˆλ‹€.

  try {
        module.exports = null;
        if (typeof require === 'function') {
          alert('window: ' + window);
          alert('jquery: ' + window.jQuery);
          alert('export: ' + module.exports);
          if ( !window.jQuery ) {
            alert('before load');
            window.jQuery = require('./node_modules/jquery/dist/jquery.js');
            alert('after load');
            window.$ = window.jQuery;
            alert('after assignment');
         }
          alert('jquery: ' + window.jQuery);
        }
    } catch(e) {
        alert('failed load.');
        console.log(e);
    }

requireμ—μ„œ window.jQuery에 ν• λ‹Ήν•  λ•Œ μ½˜μ†”μ— μ •μ˜λ˜μ§€ μ•Šμ€ 속성 createElementλ₯Ό 읽을 수 μ—†μŠ΅λ‹ˆλ‹€. 결과적으둜 jQueryκ°€ λ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ½˜μ†”μ˜ 였λ₯˜ λ©”μ‹œμ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
게슀트 νŽ˜μ΄μ§€μ— λ©”μ‹œμ§€κ°€ 기둝됨: TypeError: μ •μ˜λ˜μ§€ μ•Šμ€ μ€„μ˜ 'createElement' 속성을 읽을 수 μ—†μŒ: 40

후속 νŽ˜μ΄μ§€μ—μ„œ jqueryλ₯Ό μ„±κ³΅μ μœΌλ‘œ λ‘œλ“œν•˜λŠ” 방법에 λŒ€ν•œ μΆ”κ°€ 생각이 μžˆμŠ΅λ‹ˆκΉŒ?

감사 ν•΄μš”.

이것은 μ „μž λΉ λ₯Έ μ‹œμž‘μ„ μ‹€ν–‰ν•˜κ³  둜컬 앱을 λž˜ν•‘ν•˜λ €κ³  ν•  λ•Œ λ‚΄κ°€ 처음으둜 λ„˜μ–΄μ§„ κ²ƒμž…λ‹ˆλ‹€. ν¬λ‘¬μ—μ„œ μž‘λ™ν•˜λŠ” 것이 κ°‘μžκΈ° μ„ κ±°μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‹€νŒ¨ν•œ Angular λͺ¨λ“ˆ λ‘œλ“œμ— 였λ₯˜κ°€ λ¬»ν˜€ μžˆλŠ” 것은 λ¬Όλ‘  도움이 λ˜μ§€ μ•ŠμœΌλ―€λ‘œ 슀크립트 λ‘œλ“œ μˆœμ„œμ— λ¬Έμ œκ°€ μžˆλ‹€κ³  κ°€μ •ν–ˆλŠ”λ°, 이것이 μ œκ°€ 이 μŠ€λ ˆλ“œλ₯Ό 찾은 λ°©λ²•μž…λ‹ˆλ‹€. μ•„λ§ˆλ„ ν‚€μ›Œλ“œκ°€ λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

μœ„μ˜ @kabalage 의 μ†”λ£¨μ…˜μ€ μ™„λ²½ν•˜κ²Œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„, μ €λŠ” 이 λ¬Έμ œμ— λŒ€ν•΄ λͺ‡ 가지 정보λ₯Ό μΆ”κ°€ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ „μž μ½˜μ†” $에 jquery 라이브러리 μ½”λ“œλ₯Ό λΆ™μ—¬λ„£κ³  jQueryκ°€ μ°½ 개체의 ν•¨μˆ˜λ‘œ μΆ”κ°€λ˜λ©΄. λ‚˜λŠ” jqueryλ₯Ό μ‹€ν–‰ν•  수 μžˆμ—ˆλ‹€.

슀크립트 νƒœκ·Έκ°€ μžˆλŠ” μ°Έμ‘° jQuery, λ™μΌν•œ 였λ₯˜μž…λ‹ˆλ‹€. "λ…Έλ“œ 톡합"ν•΄μ•Ό 함: BrowserWindow()μ—μ„œ false

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„... 이 λ¬Έμ œκ°€ μ’…λ£Œλœ 이유λ₯Ό 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 여기에 μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€. NPM을 톡해 둜컬둜 jQueryλ₯Ό μ„€μΉ˜ν•˜κ³  둜컬 html νŒŒμΌμ„ λ‘œλ“œν•˜λŠ” 경우 λ‹€μŒμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

mainWindow.$ = require('jQuery');
mainWindow.jQuery = require('jQuery');

그러면 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ mainWindow.loadUrl('http://external.site.com");

$ 및 jQueryκ°€ μ •μ˜λ˜μ§€ μ•Šμ€ μœ„μΉ˜μ—μ„œ μ–ΈκΈ‰λœ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. λ…Έλ“œ 톡합을 λΉ„ν™œμ„±ν™”ν•˜λŠ” 것은 μ‹€μ œλ‘œ 수용 κ°€λŠ₯ν•œ λŒ€λ‹΅μ΄ μ•„λ‹™λ‹ˆλ‹€. 그것이 λ‚΄κ°€ μ²˜μŒμ— Electron을 μ‚¬μš©ν•˜λŠ” μ΄μœ μž…λ‹ˆλ‹€. μ €λŠ” 그것이 ν•„μš”ν•©λ‹ˆλ‹€.

μ†ŒμŠ€μ— λ“€μ–΄κ°€ 직접 문제λ₯Ό ν•΄κ²°ν•˜κ³  μ‹Άμ§€λ§Œ λ‚΄κ°€ 거기둜 λ‚΄λ €κ°€κΈ° 전에 μ˜¬λ°”λ₯Έ λ°©ν–₯으둜 λ‚˜λ₯Ό κ°€λ¦¬ν‚€λŠ” μΆ”κ°€ 정보가 μžˆλŠ” μ‚¬λžŒμ΄ μžˆλŠ”μ§€ 확인해야 ν•œλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. μ™ΈλΆ€ μ‚¬μ΄νŠΈμ— λŒ€ν•΄ λ…Έλ“œ 톡합과 ν•¨κ»˜ μž‘λ™ν•˜λ„λ‘ ν•  수 μžˆλŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

κ°μ‚¬ν•©λ‹ˆλ‹€... 그리고 μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹€. 이처럼 μƒˆλ‘­κ³  μ•„λ¦„λ‹€μš΄ λͺ¨λ“  것은 μ•½κ°„μ˜ μ£Όλ¦„μœΌλ‘œ μ‹œμž‘λ  κ²ƒμž…λ‹ˆλ‹€.

μ•ˆλΆ€ 인사

/W

λ…Έλ“œ ν†΅ν•©μœΌλ‘œ μž‘λ™ν•˜κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

  1. npm으둜 μ„€μΉ˜ν•˜λ―€λ‘œ package.json에 μ •μ˜λ©λ‹ˆλ‹€.
  2. λͺ¨λ“ˆ 이름 <script>window.$ = window.jQuery = require('jquery');</script> 와 ν•¨κ»˜ require μ‚¬μš©
  3. ν•„μˆ˜ λ§€κ°œλ³€μˆ˜μ— 경둜λ₯Ό μ‚¬μš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.
  4. trough bowerλ₯Ό μ„€μΉ˜ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. 그러면 require λ§€κ°œλ³€μˆ˜μ—μ„œ 경둜λ₯Ό μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.
  5. λΆ€νŠΈμŠ€νŠΈλž©μ„ μ‚¬μš©ν•˜λŠ” 경우 jQueryλ₯Ό λ¨Όμ € λ‘œλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€.

μœ„μ˜ λͺ¨λ“  것은 λ‚΄ κ²½ν—˜μ— μ˜ν•΄μ„œλ§Œ λ’·λ°›μΉ¨λ©λ‹ˆλ‹€.

μž‘λ™ν•©λ‹ˆλ‹€

    <script>window.$ = window.jQuery = require('jquery');</script>
    <script src="path_to/bootstrap.js"></script>

ν•˜μ§€ μ•Šμ„ 것이닀

    <script>window.$ = window.jQuery = require('./path/to/jquery.js');</script>
    // or
    <script src="path_to/jquery.js"></script>
    <script src="path_to/bootstrap.js"></script>

μ•ˆλ…•ν•˜μ„Έμš” dilmdeepλ‹˜, λΉ λ₯Έ λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€. μ†”λ£¨μ…˜μ΄ μ™ΈλΆ€ μ‚¬μ΄νŠΈμ— λŒ€ν•œ μ œμ–΄ κΆŒν•œμ— μ˜μ‘΄ν•©λ‹ˆκΉŒ? μ†ŒμŠ€ μ•‘μ„ΈμŠ€ κΆŒν•œμ΄ μ—†λŠ” μ‚¬μ΄νŠΈλ₯Ό λ‘œλ“œν•˜λ €κ³  ν•©λ‹ˆλ‹€. 당신이 packages.json에 λŒ€ν•΄ λ§ν•œ 것은 ν₯λ―Έλ‘­μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” npm을 톡해 jQueryλ₯Ό μ„€μΉ˜ν–ˆκ³ (그리고 μ „μžμ— λŒ€ν•΄ λ¬Έμ„œν™”λœ μž¬κ΅¬μΆ•μ„ μ‚¬μš©ν–ˆλ‹€) λ‚΄κ°€ λ§ν–ˆλ“―μ΄ 둜컬 HTML 파일과 ν•¨κ»˜ jQueryλ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ jQueryλŠ” λ‚΄ package.json에 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šλ‹€..... μ•„ 그리고 λ‚˜λŠ” ν…ŒμŠ€νŠΈν–ˆλ‹€. λ…Έλ“œ 톡합을 λΉ„ν™œμ„±ν™”ν•˜κ³  μž‘λ™ν•˜λŠ” λ™μ•ˆ ν•„μš”ν•œ 것은 μ•„λ‹™λ‹ˆλ‹€. 감사 ν•΄μš”.

λ‹€λ₯Έ μ‚¬λžŒμ΄ 같은 λ¬Έμ œμ— 직면할 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ 이 정보λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법(10GB의 Electron μ†ŒμŠ€ λ‹€μš΄λ‘œλ“œ ν›„)은 μ‹€μ œλ‘œ λ¬Έμ„œμ— μ²˜μŒλΆ€ν„° μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ™ΈλΆ€ μ‚¬μ΄νŠΈμ˜ URL을 ν˜ΈμΆœν•˜λŠ” λŒ€μ‹  둜컬 HTML νŒŒμΌμ„ λ‘œλ“œν•˜κ³  ν•΄λ‹Ή HTML 파일의 webviewλ₯Ό μ‚¬μš©ν•˜μ—¬ μ™ΈλΆ€ μ‚¬μ΄νŠΈλ₯Ό λ‘œλ“œν–ˆμŠ΅λ‹ˆλ‹€. λ…Έλ“œ 톡합이 ν™œμ„±ν™”λœ μƒνƒœμ—μ„œ μ™„λ²½ν•˜κ²Œ λ‘œλ“œλ©λ‹ˆλ‹€. webview에 λŒ€ν•œ λ¬Έμ„œλ₯Ό 보면 κ½€ κ°„λ‹¨ν•©λ‹ˆλ‹€. λ˜ν•œ μ±„νŒ…λ°©μ—μ„œ λ‚΄κ°€ μ†ŒμŠ€λ₯Ό μ‹œμž‘ν•  수 μžˆλ„λ‘ 도와쀀 Paulμ—κ²Œλ„ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λˆ„κ΅°κ°€κ°€ Atom을 μ‚¬μš©ν•˜μ—¬ Electron을 μ½”λ”©ν•˜κ³  Windowsμ—μ„œ WinDbgλ₯Ό μ‚¬μš©ν•˜μ—¬ λ””λ²„κΉ…ν•˜κ³  Ninjaλ₯Ό μ»΄νŒŒμΌν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ”μ§€ κΆκΈˆν•˜λ‹€λ©΄. 참고둜 μ†ŒμŠ€ μ»΄νŒŒμΌμ€ 맀우 쉽고 λ†€λΌμšΈ μ •λ„λ‘œ λΉ λ₯΄λ©° λ¨Όμ € μŠ€ν¬λ¦½νŠΈμ™€ 제곡된 λ¬Έμ„œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»΄νŒŒμΌν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ ν•œ 번, μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹€!

@WolfieλŠ‘λŒ€μΈκ°„ 브라보! λ³΄μ•ˆμ„ κ³ λ €ν•œλ‹€λ©΄ μ˜ˆμ œκ°€ μ•½κ°„ μ˜€ν•΄μ˜ μ†Œμ§€κ°€ μžˆλ‹€κ³  말해야 ν•©λ‹ˆλ‹€.

@Shufeng01 건배 친ꡬ, .Net landμ—μ„œ 이 μΆ”μœ„μ— 였고 μžˆμ–΄μ„œ μ™„μ „ν•œ n00b처럼 λŠκ»΄μ§‘λ‹ˆλ‹€. λ³΄μ•ˆμ΄ λ¬Έμ œμ˜€λ‹€λŠ” 것은 λ§žμ§€λ§Œ webview μžμ²΄μ—μ„œ disablewebsecurity ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ λŒ€λΆ€λΆ„μ΄ ν•΄κ²°λ©λ‹ˆλ‹€. 일반적으둜 λ³΄μ•ˆμ€ 웹을 λ°μŠ€ν¬ν†±μœΌλ‘œ κ°€μ Έμ˜€λŠ” 데 μžˆμ–΄ κ°€μž₯ 큰 λ„μ „κ³Όμ œλΌκ³  μƒκ°ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ κ·Έλ§Œν•œ κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ „μž λ°”μœ„.

@diimdeep κ°μ‚¬ν•©λ‹ˆλ‹€. μ†”λ£¨μ…˜μ΄ μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€( @WolfieWerewolf κ°€ μ›ν•˜λŠ” 것이

이것은 μš°λ¦¬μ—κ²Œ μ•½κ°„μ˜ λ¬Έμ œμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” jqueryλ₯Ό μ•± js와 λ²ˆλ“€λ‘œ λ¬Άκ³  이 μ—°κ²°λœ JSλŠ” μ›Ή 및 λ°μŠ€ν¬ν†± 버전 λͺ¨λ‘μ— λŒ€ν•œ λΉŒλ“œμ— μ‚¬μš©λ©λ‹ˆλ‹€(μ €ν¬λŠ” NWJSλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€). NPM μ„€μΉ˜λŠ” μš°λ¦¬μ—κ²Œ μ˜΅μ…˜μΌ 수 μžˆμ§€λ§Œ λͺ‡ 가지 이유둜 우리 μƒν™©μ—μ„œλŠ” 이상적이지 μ•ŠμŠ΅λ‹ˆλ‹€.

슀크립트 νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘λ™ν•˜κ²Œ ν•˜λŠ” 이둠적 방법이 μ—†λ‚˜μš”?

@bgSosh , λ…Έλ“œ 톡합을 λΉ„ν™œμ„±ν™”ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ( μ—¬κΈ° μ—μ„œ node-integration 킀에 λŒ€ν•΄ 읽으 μ‹­μ‹œμ˜€ )? κ·Έλ ‡κ²Œ ν•˜λ©΄ 슀크립트 νƒœκ·Έκ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ…Έλ“œ κ΄€λ ¨ ν•­λͺ©μ΄ ν•„μš”ν•œ 경우 preload μŠ€ν¬λ¦½νŠΈμ—μ„œ 이λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€(항상 λ…Έλ“œ 톡합이 있음).

@etiktin 사전 λ‘œλ“œμ—μ„œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법을 μžμ„Ένžˆ μ„€λͺ…ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? μ €λŠ” μ „μžλ₯Ό 처음 μ ‘ν–ˆκ³  μ‹€ν–‰ν•  사전 λ‘œλ“œ 슀크립트λ₯Ό κ΄€λ¦¬ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€(적어도 μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ 보이고, console.logκ°€ μž‘λ™ν•˜μ§€ μ•Šκ³ , 예λ₯Ό λ“€μ–΄ window.myExposedIPC = require('ipc') 변경은 λ‚˜μ€‘μ— μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λˆ„κ΅°κ°€ λ™μΌν•œ λ¬Έμ œκ°€ μžˆλŠ” 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ μž‘λ™ν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€: https://github.com/atom/electron/issues/1753#issuecomment -157409572

@matthiasg μž‘λ™ν•˜κ²Œ λ˜μ–΄ κΈ°μ©λ‹ˆλ‹€. κ·€ν•˜μ˜ μ˜ˆμ— λͺ‡ 가지 μ˜κ²¬μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

λ…Έλ“œ 톡합이 λΉ„ν™œμ„±ν™”λ˜μ–΄ 있고 사전 λ‘œλ“œ μŠ€ν¬λ¦½νŠΈμ—μ„œ 일뢀 λ…Έλ“œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ €λŠ” 경우 ν•„μš”ν•œ λ…Έλ“œ 전역에 λŒ€ν•œ μ°Έμ‘°λ₯Ό μœ μ§€ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. λ‹€μŒ ν‹±μ—μ„œ μ „μ—­ μ°Έμ‘°κ°€ μ‚­μ œλ˜κΈ° λ•Œλ¬Έμ—(λ…Έλ“œ 톡합 λΉ„ν™œμ„±ν™”κ°€ κ΅¬ν˜„λ˜λŠ” λ°©μ‹μ΄λ―€λ‘œ) 이 μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ°Έμ‘°λ₯Ό λ³΄μœ ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜ ν˜ΈμΆœμ΄λ‚˜ 타이머에 λŒ€ν•΄ 무언가λ₯Ό μš”κ΅¬ν•˜λ €κ³  ν•˜λ©΄ , μ‹€νŒ¨ν•©λ‹ˆλ‹€.

@etiktin κ°μ‚¬ν•©λ‹ˆλ‹€. λ¬Όλ‘  κ·Έκ²ƒμ˜ μΌλΆ€μ˜€μ§€λ§Œ λ‚΄κ°€ λˆ„λ½λœ 것은 process.once('loaded', ... ) λ¬Έμ„œκ°€ μ œμžλ¦¬μ— 있으면 μ‹€μ œλ‘œ λ‚΄κ°€ μ›ν•˜λŠ” APIλ₯Ό λ…ΈμΆœν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„,

μœ„μ˜ μ–΄λŠ 것도 λ‚˜λ₯Ό μœ„ν•΄ μΌν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ—(w2ui와 JQueryλ₯Ό μ „μž 및 독립 HTML νŽ˜μ΄μ§€μ™€ ν•¨κ»˜ μ‚¬μš©ν•˜κ³  w2ui도 jQueryλ₯Ό μ‚¬μš©ν•˜κ²Œ 함) 여기에 λ‚΄ μž‘μ—… μ†”λ£¨μ…˜μ„ κ²Œμ‹œν•΄μ•Ό ν•  ν•„μš”μ„±μ„ λŠκΌˆμŠ΅λ‹ˆλ‹€.

<html>
<head>
    <title>MyApp</title>
    <link rel="stylesheet" type="text/css" href="./lib/w2ui-1.4.3.css"/>
    <script type="text/javascript" src="./lib/require.js"></script>
    <script type="text/javascript" src="./lib/jquery-2.1.4.js" onload="$ = jQuery = module.exports;"></script>
    <script type="text/javascript" src="./lib/w2ui-1.4.3.js"></script>
</head>
<body>
<script type="text/javascript">
    // use global $ and w2ui here... 
    ...

μ €λŠ” JSλ₯Ό 처음 μ ‘ν•˜κ³  기술 연ꡬλ₯Ό μˆ˜ν–‰ν•˜κ³  있으며 이제 이 λͺ¨ν˜Έν•œ λͺ¨λ“ˆ λ‘œλ”©μ— λŒ€ν•΄ μ•½κ°„ κ±±μ •ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 어리석은 질문일 수 μžˆμ§€λ§Œ HTML νŽ˜μ΄μ§€λ₯Ό λ‘œλ“œν•  λ•Œ μ „μžκ°€ JS λͺ¨λ“ˆμ„ 일반 λΈŒλΌμš°μ €μ™€ λ‹€λ₯΄κ²Œ λ‘œλ“œν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@forman λ…Έλ“œ 톡합을 λΉ„ν™œμ„±ν™”ν•˜κ³  λ…Έλ“œ μƒν˜Έ μž‘μš©μ„ μœ„ν•΄ 사전 λ‘œλ“œ 슀크립트λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆκΉŒ? 저와 @matthiasg의 μœ„ λŒ“κΈ€μ„ μ°Έμ‘°ν•˜μ„Έμš”. κ·Έλ ‡κ²Œ ν•˜λ©΄ jquery와 λ‚˜λ¨Έμ§€λŠ” λΈŒλΌμš°μ €μ—μ„œμ™€ λ˜‘κ°™μ΄ μž‘λ™ν•©λ‹ˆλ‹€.

μž‘λ™ν•©λ‹ˆλ‹€

requirejs(['require', '../require.config'], function (requirejs, config) {
        //fixed jQuery isn't set globally
        requirejs(['jquery'],function(jquery){
            window.$ = window.jQuery =jquery;
        });
        // update global require config
        window.requirejs.config(config);
        // load app
        requirejs(['main'],function(main){
        });
    });

@forman κ°μ‚¬ν•©λ‹ˆλ‹€!! κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ„ μ œμ™Έν•˜κ³  μœ„μ˜ μ–΄λŠ 것도 μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. (μ „μž λ‚΄μž₯ 0.35.5 μ‚¬μš©)
@etiktin 이것은 mainProcess μΈ‘μ—μ„œ 아무 것도 λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜μ€‘μ— μ°Έμ‘°ν•  수 μžˆλ„λ‘ 이 μŠ€λ ˆλ“œμ— λ¬Έμ œμ™€ μ†”λ£¨μ…˜μ„ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ›Ήλ·°μ—μ„œ μ™ΈλΆ€ URL을 λ‘œλ“œν•˜κ³  있으며 μ „μž/λ…Έλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 자체 μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. webviewμ—μ„œ nodeintegration을 ν™œμ„±ν™”ν•˜λ©΄ μ™ΈλΆ€ URLμ—μ„œ μ‚¬μš© 쀑인 jQueryκ°€ μ€‘λ‹¨λ˜λ―€λ‘œ μ˜΅μ…˜μ΄ μ•„λ‹™λ‹ˆλ‹€.

μš°λ¦¬κ°€ ν•œ 일은 μš°λ¦¬κ°€ ν•„μš”ν•œ λͺ¨λ“ˆμ„ μ „μ—­ λ²”μœ„μ— λ„£λŠ” 웹뷰에 사전 λ‘œλ“œ 슀크립트λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ λ‚˜μ€‘μ— Javascriptλ₯Ό μ‹€ν–‰ν•  λ•Œ μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

preload.js:

global.ipcRenderer = require('electron').ipcRenderer;

그리고 λ‹€μŒκ³Ό 같이 ipcRenderer에 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

webview.executeJavaScript("ipcRenderer.sendToHost('hello');");

Uncaught Error: Cannot find module 'jquery' 및 이 μŠ€λ ˆλ“œμ—μ„œ 아무 도움도 λ˜μ§€ μ•ŠμŒ =/

module 섀정을 ν•΄μ œν•˜λ©΄ λ©λ‹ˆλ‹€.

λ‚΄ μ›Ή νŽ˜μ΄μ§€κ°€ λΈŒλΌμš°μ €μ™€ μ „μž λͺ¨λ‘μ—μ„œ μž‘λ™ν•˜λ„λ‘ ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€.
이 κΈ€μ—μ„œ μ„€λͺ…ν•œ 바와 같이, μ „μžλ“€μ€ 곡개 κΈ€λ‘œλ²Œ module 경우 nodeIntegration: true JQuery와 그에 따라보고 λ°˜μ‘ν•˜μ—¬ :

if ( typeof module === "object" && typeof module.exports === "object" ) {
    // bind to module
} else {
    // bind to window
}

jQueryλ₯Ό window κ°œμ²΄μ— λ°”μΈλ”©ν•˜κ³  html νŒŒμΌμ—μ„œ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ—¬ nodeIntegration: true λ₯Ό μ‚¬μš©ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="//code.highcharts.com/highcharts.js"></script>
<script>if (window.module) module = window.module;</script>

이것이 λˆ„κ΅°κ°€λ₯Ό 돕기λ₯Ό λ°”λžλ‹ˆλ‹€.

@tomkel 은 또 λ‹€λ₯Έ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.

<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
<script>window.jQuery = window.$ = module.exports;</script>

제 κ²½μš°μ—λŠ” λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ›Ήμ‚¬μ΄νŠΈμ™€ Electron μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ‚΄ μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

<!-- Launched with Electron -->
<script>
    if ('require' in window) {
        window.$ = window.jQuery = require('jquery');
    }
</script>

<!-- From CDN, Bower, etc... -->
<script src="https://code.jquery.com/jquery-2.2.0.js"></script>

<!-- Others libraries depending on jQuery -->
<script src="..."></script>

@dkfiresky 예, module 경우 μžμ‹ μ„ λ°°μΉ˜ν•˜μ—¬ μœ μ‚¬ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ–΄λ–€ 이유둜 λ‚˜λŠ” 얻을 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€

<script>window.Highcharts = module.exports;</script>

μΌν•˜λ‹€. 이λ₯Ό λ°˜μ˜ν•˜κΈ° μœ„ν•΄ 이전 λŒ“κΈ€μ„ μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

@tomkel module μΌμ‹œμ μœΌλ‘œ μˆ¨κΈ°λŠ” μ†”λ£¨μ…˜μ€ μ €μ—κ²Œ 맀우 νš¨κ³Όμ μž…λ‹ˆλ‹€. λ‚΄ λ¬Έμ œλŠ” require('angular') μ‹€νŒ¨ν•œ CommonJS ν™˜κ²½μ— μžˆλ‹€κ³  κ°€μ •ν•˜κ³  ngDialogλ₯Ό μ‚¬μš©ν•˜μ—¬ nw.jsμ—μ„œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” λ™μ•ˆμ΄μ—ˆκ³  자체적으둜 Angular λͺ¨λ“ˆλ‘œ λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Electron 0.36.7μ—μ„œλŠ” λͺ¨λ“ˆμ„ 찾지 λͺ»ν•˜κΈ° λ•Œλ¬Έμ— κ°„λ‹¨ν•œ window.$ = require('jquery'); λ₯Ό μˆ˜ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ Œλ”λŸ¬μ— κΈ°λ³Έ ν”„λ‘œμ„ΈμŠ€μ™€ λ™μΌν•œ λͺ¨λ“ˆ 해상도 κ²½λ‘œκ°€ μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ jQueryλŠ” document κ°€ μ—†λŠ” κΈ°λ³Έ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그리고 #4243κ³Ό 같은 HTTPλ₯Ό 톡해 νŽ˜μ΄μ§€λ₯Ό μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— require('jquery') κ°€ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같이 메인 ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€λ‘œ λͺ¨λ“ˆ 경둜λ₯Ό μΆ”κ°€ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€.

require('electron').remote.process.mainModule.paths.forEach(function(path) {
    require('module').globalPaths.push(path);
});

κ·Έ ν›„μ—λŠ” 문제 없이 require('jquery') λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 λ‹€λ₯Έ 영ν–₯을 λ―ΈμΉ  수 μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그리고 #4243κ³Ό 같은 HTTPλ₯Ό 톡해 νŽ˜μ΄μ§€λ₯Ό μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— require('jquery')κ°€ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

원격 μ½˜ν…μΈ κ°€ node.js에 μ•‘μ„ΈμŠ€ν•˜λ„λ‘ ν—ˆμš©ν•˜λŠ” 경우 앱이 맀우 μ•ˆμ „ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 원격 μ½˜ν…μΈ λ₯Ό μ‹€ν–‰ν•  λ•Œ λ…Έλ“œ 톡합을 λΉ„ν™œμ„±ν™”ν•˜κ³  사전 λ‘œλ“œ 슀크립트λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

"원격 μ½˜ν…μΈ "κ°€ localhost인 κ²½μš°μ—λ„? 둜컬 νŒŒμΌμ—μ„œ μ½λŠ” λŒ€μ‹  λ…Έλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό λΉŒλ“œν•˜κ³  μ œκ³΅ν•©λ‹ˆλ‹€. 그게 μ „λΆ€μž…λ‹ˆλ‹€.

@dkfiresky μ—μ„œ ν™•μž₯ν•˜λ©΄ λΈŒλΌμš°μ € λ²„μ „μ—μ„œ Uncaught ReferenceError: module is not defined λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ λ‹€μŒμ„ μ‹œλ„ν•˜μ‹­μ‹œμ˜€.

<script src="./bower_components/jquery/dist/jquery.min.js"></script>
<script>window.jQuery = window.$ = typeof module === 'object' ? module.exports : jQuery</script> 

@dspint module λŠ” λ…Έλ“œ 톡합이 λΉ„ν™œμ„±ν™”λœ κ²½μš°μ—λ§Œ μ •μ˜λ˜μ§€ μ•ŠμœΌλ―€λ‘œ λ…Έλ“œ 톡합이 ν™œμ„±ν™”λœ μƒνƒœμ—μ„œλ§Œ 제 예제λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

window.open μ‚¬μš©ν•˜λŠ” 경우 μ°½ μ˜΅μ…˜κ³Ό ν•¨κ»˜ nodeIntegration=0 λ₯Ό 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

window.open('https://your.cool/url', 'title', 'nodeIntegration=0');

λ‚˜λŠ” 일을 ν•΄μš”:

<script>
  var saveModule = module;
  delete module;
</script>
  <script src="jquery.js"></script>
  <script src="jquery-ui.js"></script>
<script>
  module = saveModule;
</script>

@gnailκ³Ό 같은 λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 각도 ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” λ…Έλ“œ μ„œλ²„κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 그의 μ½”λ“œκ°€ λ‚˜λ₯Ό μœ„ν•΄ 그것을 κ³ μ³€λ‹€.

require('electron').remote.process.mainModule.paths.forEach(function(path) {
  require('module').globalPaths.push(path);
});

그것은 λ‚˜λ₯Ό μœ„ν•΄ μΌν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ πŸ˜„

<script>
    window['old_module'] = window['module'];
    delete window.module;
</script>

<script src="any_lib_like_jquery.js" />

<script>
    window['module'] = window['old_module'];
    delete window.old_module;
</script>

이 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이미 이 μŠ€λ ˆλ“œλ₯Ό λͺ¨λ‘ μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 아무것도 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
λͺ¨λ“ .
λ‚˜λŠ” μ „μž μŠ€νƒ€ν„° λ‹΄λ‹Ήμžλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€

@PauloGaldo 기본적으둜 이 μŠ€λ ˆλ“œμ˜ λͺ¨λ“  μ†”λ£¨μ…˜μ΄ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ½”λ“œμ˜ κ΄€λ ¨ 발췌문과 λ°œμƒν•œ λͺ¨λ“  였λ₯˜ λ©”μ‹œμ§€λ₯Ό κ²Œμ‹œν•˜μ‹­μ‹œμ˜€.

@ChiperSoft μ½”λ“œλ₯Ό 어디에 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ μ•Œλ €

@tomkel μ•„μ£Ό μ’‹μ•„μš”!
λ§ˆμΉ¨λ‚΄ Masonryκ°€ Electronμ—μ„œ μΌν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

μ–΄λ–€ 이유둜 λΈŒλΌμš°μ €μ™€ Electron μ•±μ—μ„œ jQueryκ°€ μž‘λ™ν•˜λ„λ‘ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
λ‚΄ μ›Ή 앱은 λΈŒλΌμš°μ €μ—μ„œ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€λ§Œ μ „μž 앱을 톡해 λ™μΌν•œ URL을 λ‘œλ“œν•˜λ €κ³  ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

image

μ›Ήμ•± - https://github.com/zulip/zulip
μ „μž μ•± - https://github.com/zulip/zulip-electron

webapp은 npm을 톡해 jquery 1.12.1 버전을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€μ— ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— nodeintegration offλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 어렀움을 κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€. 아무도 그것을 μž‘λ™μ‹œν‚€λŠ” 방법을 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?
cc @aaaaahaaaaa @maykefreitas @paulcbetts @tomkel @dkfiresky

@englishextra 운이 μ—†μŠ΅λ‹ˆλ‹€. λ‚΄ μ•±μ˜ preload.js에 μ½”λ“œλ₯Ό ν¬ν•¨ν•˜λ €κ³  ν–ˆμ§€λ§Œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

@englishextra μ•„λ‹ˆμš”, 제 μ•±μ—λŠ” jqueryκ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ—¬κΈ° μ—μ„œ μ—…λ°μ΄νŠΈ μ½”λ“œλ₯Ό μ°Έμ‘° 이 .

Aurelia ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄:
https://github.com/aurelia/skeleton-navigation/pull/675/commits/6292e698dcb8f383afc748aa7c8a50e540dfbe2e

λ‚˜λŠ” μ΄κ²ƒμœΌλ‘œμ΄ 문제λ₯Ό ν•΄κ²°ν–ˆλ‹€.

<script type="text/javascript" src="js/jquery.min.js" onload="window.$ = window.jQuery;"></script>

그리고 μ„€μ •

webPreferences: {
            nodeIntegration: false, 
        }

nodeIntegration: true, imorot jQueryλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 이와 같이

<script type="text/javascript" src="js/jquery.min.js" onload="window.$ = window.jQuery = module.exports;"></script>

μ°Έμ‘°
https://github.com/electron/electron/issues/345

λ‚΄ 말은, λ‚˜μœ 문제인 것 κ°™μœΌλ‹ˆ μ‹€μ œ Electron에 ν¬ν•¨μ‹œν‚€μ§€ μ•Šκ² λŠ”κ°€? μ£Όμš” JavaScript 라이브러리λ₯Ό Electron에 톡합할 수 μžˆμŠ΅λ‹ˆκΉŒ?

Electron μ•±μ—μ„œ jQueryλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 맀우 잘λͺ»λ˜μ—ˆκ±°λ‚˜ μ΅œμ†Œν•œ λΉ„νš¨μœ¨μ μΈ 일을 ν•˜κ³  μžˆμ„ κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
<script>if (typeof module === 'object') {window.jQuery = window.$ = module.exports;};</script>

@drowlands Electron에 타사 라이브러리λ₯Ό ν¬ν•¨ν•˜λŠ” 것은 λ‚˜μœ 생각인 것 κ°™μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ—…λ°μ΄νŠΈ λ£¨ν‹΄μ΄λ‚˜ 버전 선택을 상상해 λ³΄μ‹­μ‹œμ˜€.
@amhoho require jQueryκ°€ ν•„μš”ν•˜κ±°λ‚˜ μ΅œμƒμœ„ ν•¨μˆ˜μ—μ„œ μ΄ˆκΈ°ν™” μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. factory( global ); 만 λ‚¨κΉλ‹ˆλ‹€.

μ—¬κΈ°:

( function( global, factory ) {

    "use strict";

    if ( typeof module === "object" && typeof module.exports === "object" ) {

        // For CommonJS and CommonJS-like environments where a proper `window`
        // is present, execute the factory and get jQuery.
        // For environments that do not have a `window` with a `document`
        // (such as Node.js), expose a factory as module.exports.
        // This accentuates the need for the creation of a real `window`.
        // e.g. var jQuery = require("jquery")(window);
        // See ticket #14549 for more info.
        module.exports = global.document ?
            factory( global, true ) :
            function( w ) {
                if ( !w.document ) {
                    throw new Error( "jQuery requires a window with a document" );
                }
                return factory( w );
            };
    } else {
        factory( global );
    }

제 κ²½μš°μ—λŠ” fetch/Promise λ˜λŠ” xhr을 톡해 라이브러리λ₯Ό λ‘œλ“œν•˜λ―€λ‘œ κ³΅κΈ‰μ—…μ²΄μ˜ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ λͺ¨λ“ˆ 검사λ₯Ό μ œκ±°ν•˜λŠ” 이 루틴이 μžˆμŠ΅λ‹ˆλ‹€.
@RRorg 무슨 말을 ν•˜λŠ”μ§€ 이상해

ν‘œμ‹œ

@kabalage μœ„ κ²Œμ‹œλ¬Όμ˜ ꡬ성이

const window = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false, 
  },
});

곡식 λ¬Έμ„œ:
https://electronjs.org/docs/faq#i -can-not-use-jqueryrequirejsmeteorangularjs-in-electron
```