2016-11-02 4 views
0

В простой программе машинопись I require Узел FFI сWebpack завершается с узлом FFI и машинопись - динамическая требуют ошибки

import * as Electron from 'electron';` 
import * as ffi  from 'ffi';` 

, а затем

mylib = ffi.Library('libmoi', { 
    'worker': [ 'string', [ 'string' ] ], 
    'test' : [ 'string', []   ] 
    }); 

Linking, что до по урожайности WebPack

WARNING in ./~/bindings/bindings.js 
Critical dependencies: 
76:22-40 the request of a dependency is an expression 
76:43-53 the request of a dependency is an expression 
@ ./~/bindings/bindings.js 76:22-40 76:43-53 

Проблема заключается в том, что FFI имеет динамический require и исправление представляется, что webpack.ContextReplacementPlugin в файле webpack.config.js.

Это немного вне моей досягаемости, но пример для углового случае:

plugins: [ 
     new webpack.ContextReplacementPlugin(
     // The (\\|\/) piece accounts for path separators in *nix and Windows 
     /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, 
     root('./src') // location of your src 
    ) 
    ] 

Любая идея, как сделать это для FFI?

+0

ли вы понять это? – jamrizzi

+0

Да, ответ ниже. – timecc

ответ

3

Вот ответ: github issue comment on the Johnny-Five repo

Цитируя ответ Brodo, это то, что вы делаете, чтобы остановить WebPack получать прорычал с «привязок» и аналогичные:

... the webpack config looks like this: 

module.exports = { 
    plugins: [ 
    new webpack.ContextReplacementPlugin(/bindings$/, /^$/) 
    ], 
    externals: ["bindings"] 
} 
+0

Я получаю следующую ошибку, когда я делаю это: ReferenceError: привязки не определены' – jamrizzi

+0

Webpack изменился. Вам нужно будет обновить ответ, чтобы он соответствовал новым выпускам. – timecc

0

Я также имел аналогичный вопрос , каким-то образом мне удалось это разрешить. Сначала я объясню свое понимание.

Основная работа webpack - связать отдельный файл кода в один файл, по умолчанию он связывает весь код, на который ссылается его дерево.

Вообще два типа node_modules:

  1. для использования на браузер стороне (угловой, rxjs и т.д.)
  2. Для того, чтобы использоваться на nodejs стороне (экспресс, FFI и т.д.)

Это безопаснее связывать браузерный узел node_module, но не безопаснее связывать узел node_module с узлом, потому что они не разработаны таким образом. Таким образом, решение находится ниже двух этапов:

  1. Дайте соответствующую цель (узел, электрон и т.д.) в webpack.config.js файл "target":'electron-renderer' например, по умолчанию он браузер
  2. Declare node_side модуль в качестве внешней зависимости в вашем webpack.config.js файл, например,

    "externals": { 
        "bindings": "require('bindings')", 
        "ffi": "require('ffi')" 
    } 
    
Смежные вопросы