Razzle: Использование babel-register

Созданный на 9 апр. 2016  ·  17Комментарии  ·  Источник: jaredpalmer/razzle

Привет,

Спасибо за отличное репо!
Меня беспокоит использование babel-register на сервере.
Согласно документации babel , его нельзя использовать в производстве.

Обратите внимание, что это не предназначено для производственного использования. Считается плохой практикой развертывать код, который компилируется таким образом. Гораздо лучше заранее скомпилировать перед развертыванием.

Есть ли план решения этой проблемы?

Самый полезный комментарий

Хорошо, исправили эту проблему каким-то образом.

Нам нужно добавить это в razzle.config .

module.exports = {
  modify: (config, { target, dev }) => {
    if(target === "node") {
      config = {
        ...config,
        externals: []
      }
    }
    return config;
  }
}

Чтобы эта работа в вашем конвейере CI, вам нужно сделать process.env.CI ложным.

Потому что, если переменная среды CI истинна, предупреждения рассматриваются как ошибки, и ваша сборка завершится ошибкой. Почему это спросите вы? Из-за проблемы с явной зависимостью

./node_modules/express/lib/view.js
Critical dependency: the request of a dependency is an expression

Все 17 Комментарий

Мы могли бы скомпилировать всю папку src в build ? Сделал быстрый тест, и вот что я придумал:

"start:prod": "npm run build:server && npm run build && NODE_ENV=production node ./build/server/server.js",
"build:server": "babel src --out-dir build",

Я заменил скрипты npm и вроде работает. Я уверен, что есть лучшие решения.

Потребуется использовать веб-пакет на сервере

В настоящее время пробую это http://jlongster.com/Backend-Apps-with-Webpack--Part-I

Сделаю пиар, когда все заработает. 👍

Проблема в том, что на сервере нет HMR, даже с подходом jlongster. 😦

Как насчет того, чтобы ограничиться только производством?

Это выглядело бы примерно так:

// webpack.server.prod.config.js

var webpack = require('webpack')
var fs =  require('fs')
var path = require('path')

module.exports = {
  target: 'node',

  devtool: 'inline-source-map',

  entry: path.join(__dirname, 'app.js'),

  output: {
    filename: path.join(__dirname, 'app.bundle.js')
  },

  // keep node_module paths out of the bundle keep size down
  externals: getExternals(),

  node: {
    __filename: true,
    __dirname: true
  },

  module: {
    loaders: [
      { test: /\.js$/, loader: 'babel-loader' }  // handwaiving here
    ]
  },

  plugins: [
    new webpack.BannerPlugin(
      'require("source-map-support").install();',
      { raw: true, entryOnly: false }
    )
  ]
}

function getExternals() {
  const nodeModules = fs.readdirSync(path.resolve(__dirname, 'node_modules'))
  return nodeModules.reduce((ext, mod) => {
    ext[mod] = 'commonjs ' + mod
    return ext
  }, {})
}

Спасибо за быстрый ответ! Итак, в основном после использования этой конфигурации нам нужно изменить start:prod script, чтобы использовать app.bundle.js верно?

Другой вопрос о запуске в производстве, в настоящее время команда start:prod использует node для запуска сервера.
Разве мы не должны использовать что-то вроде PM2 для запуска сервера на производстве?
Значит, он будет автоматически перезапускаться при изменении кода и масштабироваться на все ядра?

PM2 - это много накладных расходов. Мы используем Throng в производстве. Но да, мы можем внести это изменение.

Привет, народ,
Похоже, нам все еще нужны node_modules в производстве? Развертывание только папки / build вызывает ошибку, связанную с babel, поэтому мне интересно, не связана ли эта проблема. Кто-нибудь придумал что-то подобное?

При выполнении node ./build/server.js с использованием только папки / build:
Error: Cannot find module 'babel-runtime/core-js/json/stringify'

Спасибо!

Изменить: переформулировать мой вопрос: почему нам все еще нужен node_modules в производстве, даже если весь код связан с Webpack? Разве все необходимое для производства не должно находиться в папке / build?

Вам не нужны модули Node в продукте

Привет, Джаред,
Спасибо за Ваш ответ :)

Я тоже этого ожидал! Итак, я протестировал новую установку с examples/basic и выполнил следующий процесс:

  • cd examples/basic
  • npm install
  • npm run build
  • rm -rf node_modules
  • npm run start:prod

а затем он терпит неудачу:
Error: Cannot find module 'express'

Открывать новый выпуск или я что-то не так делаю?

Для потомков:
Насколько я понимаю, конфигурация Webpack для бэкэнда использует webpack-node-externals как показано в этой строке, поэтому node_modules не входят в комплект бэкэнда. Это означает, что node_modules требуются для производства и должны быть развернуты вместе с папкой /build .

Привет @Grsmto!
Можете ли вы решить проблему? Создать приложение razzle с include node_modules?
Для меня нехорошо копировать все файлы из каталога node_modules в продакшн.

Привет @krystianjj!
Мне пришлось скопировать папку node_modules на производственный сервер или создать приложение прямо на производственном сервере. к сожалению, я не нашел способа развернуть только папку /build .

Спасибо за быстрый ответ @Grsmto
Я делаю то же самое - копирую package.json на производственный сервер, запускаю npm install, и у меня есть папка сборки с node_modules.
Возможно, @jaredpalmer в будущем добавит исправление для этого, или это хорошее решение для копирования node_modules на сервер.

У кого-нибудь это работает, я не хочу брать node_modules на рабочий сервер после создания пакета.

Хорошо, исправили эту проблему каким-то образом.

Нам нужно добавить это в razzle.config .

module.exports = {
  modify: (config, { target, dev }) => {
    if(target === "node") {
      config = {
        ...config,
        externals: []
      }
    }
    return config;
  }
}

Чтобы эта работа в вашем конвейере CI, вам нужно сделать process.env.CI ложным.

Потому что, если переменная среды CI истинна, предупреждения рассматриваются как ошибки, и ваша сборка завершится ошибкой. Почему это спросите вы? Из-за проблемы с явной зависимостью

./node_modules/express/lib/view.js
Critical dependency: the request of a dependency is an expression

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

GouthamKD picture GouthamKD  ·  3Комментарии

mhuggins picture mhuggins  ·  3Комментарии

MaxGoh picture MaxGoh  ·  4Комментарии

dizzyn picture dizzyn  ·  3Комментарии

knipferrc picture knipferrc  ·  5Комментарии