NW.js child_process не работает с приложением vue.js - PullRequest
0 голосов
/ 06 мая 2018

Я хочу создать приложение vue.js с узлом webkit ( Nw.js ).

Приложение должно выполнить двоичный файл, поэтому я сделал

const exec = require("child_process").exec;
  exec(
    '"C:\\someBin.exe" /someOptions',
    (e, stdout, stderr) => {
      if (e instanceof Error) {
        console.error(e);
        throw e;
      }
      console.log("stdout ", stdout);
      console.log("stderr ", stderr);
    }
  );

Я пробовал с .exec или .spawn, но всегда получаю странные ошибки, такие как:

TypeError: (0 , n(...).exec) is not a function

Он должен быть связан со мной с помощью vue.js, потому что когда я тестирую этот код в простом узле webkit-приложения с помощью только тега script, он работает!

Существует ли какая-либо несовместимость между webpack (используется vue.js) и ключевым словом require для nodejs?

При печати содержимого require ("child_process") есть несколько вещей, но ничего из того, что я ожидал (без методов spawn или exec). Кажется, что сам запрос не работает для этого конкретного случая. Но, как ни странно, он все еще работает для других установленных пакетов npm.

Для создания приложения я использую "npm run build" , который генерирует окончательные файлы непосредственно в каталоге / dist. В этот каталог я поместил файлы webkit узла, чтобы я мог просто запустить оттуда двоичный файл webkit узла.

1 Ответ

0 голосов
/ 10 мая 2018

Наконец я нашел решение.

Кажется, что веб-пакет перезаписывает некоторые узлы-модули.

Чтобы предотвратить это, вам просто нужно добавить это в конфигурацию вашего веб-пакета:

target: 'node-webkit',

Я прочитал, что существуют другие типы доступных целей, например, "узел".

Это большая часть файла веб-пакета, который поможет вам правильно разместить вышеуказанную строку.

module.exports = {
  context: path.resolve(__dirname, '../'),
  entry: {
    app: './src/main.js'
  },
  output: {
    path: config.build.assetsRoot,
    filename: '[name].js',
     publicPath: process.env.NODE_ENV === 'production'
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  },
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
    }
  },
  module: {
    rules: [
      ...(config.dev.useEslint ? [createLintingRule()] : []),
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: vueLoaderConfig
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        include: [resolve('src'), resolve('test'), 
resolve('node_modules/webpack-dev-server/client')]
       },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('media/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
        }
      }
    ]
  },
  target: 'node-webkit'
}
...