Heroku не удалось скомпилировать во время сборки

#reactjs #class #heroku #deployment #components

#reactjs #класс #heroku #развертывание #Компоненты

Вопрос:

Пожалуйста, помогите. У меня возникли проблемы с развертыванием в моем приложении Heroku. Я не могу успешно создать и развернуть Heroku.

Не удалось скомпилировать все компоненты моего класса

 remote:        Failed to compile.
remote:
remote:        ./src/contexts/shopify/ShopContext.js
remote:          Line 14:3:   'state' is not defined                        no-undef
remote:          Line 28:3:   'fetchShopInfo' is not defined                no-undef
remote:          Line 34:3:   'createCheckout' is not defined               no-undef
remote:          Line 40:3:   'fetchCheckoutById' is not defined            no-undef
remote:          Line 49:3:   'addVariantToCart' is not defined             no-undef
remote:          Line 67:3:   'updateQuantityInCart' is not defined         no-undef
remote:          Line 81:3:   'removeLineItemInCart' is not defined         no-undef
remote:          Line 91:3:   'fetchAllProducts' is not defined             no-undef
remote:          Line 97:3:   'fetchProductById' is not defined             no-undef
remote:          Line 103:3:  'sortProductsByTitle' is not defined          no-undef
remote:          Line 120:3:  'fetchProductsByCollectionId' is not defined  no-undef
remote:          Line 131:3:  'handleCartClose' is not defined              no-undef
remote:          Line 135:3:  'handleCartOpen' is not defined               no-undef
remote:
remote:        Search for the keywords to learn more about each error.
remote:
remote:
remote: npm ERR! code ELIFECYCLE
remote: npm ERR! errno 1
remote: npm ERR! Exit status 1
remote: npm ERR!
remote: npm ERR! Failed at the [appname]@3.0.1-SNAPSHOT build script.
remote: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
remote:
remote: npm ERR! A complete log of this run can be found in:
remote: npm ERR!     /tmp/npmcache.WEaEj/_logs/2021-02-23T05_44_14_298Z-debug.log
remote: npm ERR! code ELIFECYCLE
remote: npm ERR! errno 1
remote: npm ERR! [appname]@1.0.0 heroku-postbuild: npm install --prefix client amp;amp; npm run build --prefix client
remote: npm ERR! Exit status 1
remote: npm ERR!
remote: npm ERR! Failed at the[appname]@1.0.0 heroku-postbuild script.
remote: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
remote:
remote: npm ERR! A complete log of this run can be found in:
remote: npm ERR!     /tmp/npmcache.WEaEj/_logs/2021-02-23T05_44_14_319Z-debug.log
remote:
remote: -----> Build failed
remote:
remote:        We're sorry this build is failing! You can troubleshoot common issues here:
remote:        https://devcenter.heroku.com/articles/troubleshooting-node-deploys
remote:
remote:        If you're stuck, please submit a ticket so we can help:
remote:        https://help.heroku.com/
remote:
remote:        Love,
remote:        Heroku
remote:
remote:  !     Push rejected, failed to compile Node.js app.
remote:
remote:  !     Push failed
remote:  !
remote:  ! ## Warning - The same version of this code has already been built: 434f626f0467fb3d0d901ba80346bcc3da21c7c7
remote:  !
remote:  ! We have detected that you have triggered a build from source code with version 434f626f0467fb3d0d901ba80346bcc3da21c7c7
remote:  ! at least twice. One common cause of this behavior is attempting to deploy code from a different branch.
remote:  !
remote:  ! If you are developing on a branch and deploying via git you must run:
remote:  !
remote:  !     git push heroku <branchname>:main
 

Вот компонент класса

 class ShopProvider extends Component {
  state = {
    products: [],
    productsCollection: [],
    product: {},
    checkout: { lineItems: [] },
    isCartOpen: false,
    shop: {},
  };

  componentDidMount() {
    this.createCheckout();
    this.fetchShopInfo();
  }

  fetchShopInfo = async () => {
    const shopInfo = await client.shop.fetchInfo();

    this.setState({ shop: shopInfo });
  };

  createCheckout = async () => {
    const checkout = await client.checkout.create();

    this.setState({ checkout: checkout });
  };

  fetchCheckoutById = async (checkoutId) => {
    try {
      return await client.checkout.fetch(checkoutId);
    } catch (error) {
      console.error(error);
      return null;
    }
  };

  addVariantToCart = async (variantId, quantity) => {
    this.setState({ isCartOpen: true });

    const lineItemsToAdd = [
      {
        variantId,
        quantity: parseInt(quantity, 10),
      },
    ];

    const checkout = await client.checkout.addLineItems(
      this.state.checkout.id,
      lineItemsToAdd,
    );

    this.setState({ checkout: checkout });
  };

  updateQuantityInCart = async (lineItemId, quantity) => {
    const checkoutId = this.state.checkout.id;
    const lineItemsToUpdate = [
      { id: lineItemId, quantity: parseInt(quantity, 10) },
    ];

    const newCheckout = await client.checkout.updateLineItems(
      checkoutId,
      lineItemsToUpdate,
    );

    this.setState({ checkout: newCheckout });
  };

  removeLineItemInCart = async (lineItemId) => {
    const checkoutId = this.state.checkout.id;

    const newCheckout = await client.checkout.removeLineItems(checkoutId, [
      lineItemId,
    ]);

    this.setState({ checkout: newCheckout });
  };

  fetchAllProducts = async () => {
    const products = await client.product.fetchAll();

    this.setState({ products: products });
  };

  fetchProductById = async (productId) => {
    const product = await client.product.fetch(productId);

    this.setState({ product: product });
  };

  sortProductsByTitle = (products) => {
    if (!products) return null;

    return products.sort((a, b) => {
      const titleA = a.title.toUpperCase();
      const titleB = b.title.toUpperCase();
      if (titleA < titleB) {
        return -1;
      }
      if (titleA > titleB) {
        return 1;
      }

      return 0;
    });
  };

  fetchProductsByCollectionId = async (collectionId) => {
    const collection = await client.collection.fetchWithProducts(collectionId, {
      productsFirst: 30,
    });

    this.setState({
      productsCollection: this.sortProductsByTitle(collection.products),
    });
  };

  handleCartClose = () => {
    this.setState({ isCartOpen: false });
  };

  handleCartOpen = () => {
    this.setState({ isCartOpen: true });
  };

  render() {
    return (
      <ShopContext.Provider
        value={{
          ...this.state,
          fetchCheckoutById: this.fetchCheckoutById,
          fetchAllProducts: this.fetchAllProducts,
          fetchProductById: this.fetchProductById,
          addVariantToCart: this.addVariantToCart,
          fetchProductsByCollectionId: this.fetchProductsByCollectionId,
          updateQuantityInCart: this.updateQuantityInCart,
          removeLineItemInCart: this.removeLineItemInCart,
          handleCartClose: this.handleCartClose,
          handleCartOpen: this.handleCartOpen,
          client: client,
        }}
      >
        {this.props.children}
      </ShopContext.Provider>
    );
  }
}
 

Я попытался реорганизовать компонент и изменил его на функциональный компонент, теперь все компоненты моего класса не смогли скомпилироваться.

        Failed to compile.
       
       ./src/AppTopbar.js
         Line 5:10:  'defaultProps' is not defined  no-undef
         Line 9:10:  'propTypes' is not defined     no-undef
       
       Search for the keywords to learn more about each error.
 

Комментарии:

1. Делитесь всем сполна build.log . Поделитесь своим package.json . Они предоставляют информацию о том, какие пакеты необходимо установить. Журнал сборки содержит информацию о том, были ли эти пакеты успешно установлены. Вы показали ShopProvider , но нет ShopContext . Вы сказали, что пытались провести рефакторинг, но теперь все ваши классы не компилируются. Сначала вы должны убедиться, что он запускается локально.

2. У меня такая же проблема, и она просто всплывает сегодня, я работал над проектом больше года, и вдруг сегодня при развертывании появилась эта ошибка. Мне нужна помощь!

3. remote: ./src/components/Expenses/AddTransactionGP.js remote: Line 10:5: 'state' is not defined no-undef remote: Line 32:5: 'handelClick' is not defined no-undef Однако проект выполняется локально, и я развертывал тот же код с небольшими изменениями в другом файле. После многих попыток я начал добавлять конструктор в файл, имеющий проблему, и заменил функцию стрелки на обычную функцию, это сработало для файла, но другой файл показывает ту же ошибку, поэтому мне придется реорганизовать все файлы, что не имеет никакого смысла.

4. @YahiaBadr, то же самое. рад, что я не единственный. Я тоже работал над этим проектом почти год, я единственный, кто продвигает и внедряет heroku. Да, проект также выполняется локально. Я уже рефакторил один компонент класса, но другой файл показывает ту же ошибку. У меня все еще есть 31 файл, и я слишком боюсь их менять. пожалуйста, дайте мне знать, как вы это исправите.

5. @TinNguyen, сэр, да, проект выполняется локально. Он терпит неудачу только тогда, когда я пытаюсь протолкнуть его в Heroku.

Ответ №1:

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