Handlebars.js: تتطلب حزمة الويب + خطأ في المقاود

تم إنشاؤها على ٢٦ يناير ٢٠١٦  ·  21تعليقات  ·  مصدر: handlebars-lang/handlebars.js

أحصل على الخطأ التالي ببساطة عن طريق استخدام المقاود المطلوبة.

▶ webpack --display-modules   
Hash: bdb0fe35e2f8bde783e5
Version: webpack 1.12.12
Time: 116ms
         Asset     Size  Chunks             Chunk Names
bundle.main.js  2.82 kB       0  [emitted]  main
   [0] ./src/index.js 150 bytes {0} [built]
   [1] ./~/handlebars/lib/index.js 792 bytes {0} [built] [3 warnings] [3 errors]

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

WARNING in ./~/handlebars/lib/index.js
require.extensions is not supported by webpack. Use a loader instead.

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../dist/cjs/handlebars/compiler/printer in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 9:14-64

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve module 'fs' in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 17:11-24

ERROR in ./~/handlebars/lib/index.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../dist/cjs/handlebars in /home/abhisekp/MyProjects/JSApps/MadeWithLove-Webpack/node_modules/handlebars/lib
 @ ./~/handlebars/lib/index.js 7:17-50 

بلدي index.js

var handlebars = require('handlebars');

بلدي package.json

  "dependencies": {
    "handlebars": "^4.0.5"
  }

التعليق الأكثر فائدة

حصلت على هذا مع ..

resolve: {
    alias: {
       handlebars: 'handlebars/dist/handlebars.min.js'
    }
}

في حزمة webpack الخاصة بي

ال 21 كومينتر

كما ورد في # 1102 إضافة السطر
"browser": "dist/handlebars.js",
لحزمة المقاول. json حل هذا من أجلي.

يبدو أنه مشكلة في Webpack وليس المقاود.
المسار الافتراضي العادي لأي ملفات أساسية لوحدة العقدة هو / node_modules / module_name / dist.

هذا هو المكان الذي يفترض فيه تطبيق العقدة وجودهم ؛ هذا يعني أن Webpack يتعامل مع يتطلب () ؛ بشكل مختلف عن العقدة.

حصلت على هذا مع ..

resolve: {
    alias: {
       handlebars: 'handlebars/dist/handlebars.min.js'
    }
}

في حزمة webpack الخاصة بي

شكرا @ gilesbradshaw : +1:: ابتسامة:

abhisekp هل تم حل هذا؟ الرجاء إغلاق إذا كانت الإجابة بنعم.

rafde لم واقتراح حل واضح.

شكرا للتذكير. :احمر خدود:

لا يزال يتم إعادة إنتاج المشكلة إذا كنت بحاجة إلى وجود مقود في مكان ما بتنسيق .js:

var Handlebars = require('handlebars');
Handlebars.registerHelper('greet', function(name) {
            return 'Hello, name=' + name + '!';
});

ولكن إذا قمت بإزالة هذا الخط

var Handlebars = require('handlebars');

ذهب القضية

تضمين التغريدة
شكرا جزيلا!

أحصل أيضًا على هذا الخطأ عند استخدام المقاود مع مشروع Angular 2 CLI. لا يمكنني تغيير تكوين حزمة الويب الخاصة بي لأن فريق Angular CLI قرر إخفاء تفاصيل حزمة الويب من مستخدمي Angular CLI وهم لا يدعمون رسميًا تعديل تكوين حزمة الويب.

oocx يمكنك فقط استيراد ملف JS من مجلد node_modules مثل ذلك

import 'handlebars/dist/handlebars.min.js';

هذا يعمل بشكل جيد!

لجعل هذا يعمل في مشروع زاوي 4 كان علي القيام بذلك:
استيراد * كمقابض من "المقاود / التوزيع / المقاود" ؛

عادة ما أفعل هذا فقط:
استيراد * كمقود من "المقاود" ؛

يعمل السطر أعلاه بشكل جيد في مشروع مطبوع في العقدة ، ولكن ليس في الزاوية 4.

HandleBars هو المشروع الوحيد الذي يتعين عليّ استيراد مثل هذا. هذا يجعلني أشعر بالقلق من أنني سأواجه مشكلة في المستقبل. يبدو أن HandleBars لا يلعب بشكل جيد مع webpack الخاص بـ angular.

يمكنني إلقاء نظرة إذا قام أي شخص بإعداد نموذج بسيط لمشروع يعيد إنتاج المشكلة. لا وعود بخصوص "متى" ، على الرغم من ...

@ swilliams-a3digital الحصول على Could not find a declaration file for module إعلان الوحدة النمطية "مقاود" أو إضافة @ type / handlebars لا يساعد. كيف حل هذا؟

للآخرين الذين يبحثون هنا

هذا هو أفضل حل وجدته
https://github.com/valtech-nyc/brookjs/blob/master/packages/brookjs/webpack.config.js#L39 -L43
هنا https://github.com/pcardune/handlebars-loader/issues/110#issuecomment -358681867

بفضلmAAdhaTTah

محدث:

//fix handlebars warnings
config.resolve.alias = {
    ...config.resolve.alias,
    'handlebars/runtime': 'handlebars/dist/cjs/handlebars.runtime',
    'handlebars': 'handlebars/dist/cjs/handlebars.runtime',
};

هذا متخلف.
من المفترض أن تكون مكتبة handlebars قد أصلحت هذا الخطأ.
ومع ذلك فهم يتجاهلون ويتجاهلون.

الحل هو استبدال:

import Handlebars from 'handlebars'

مع:

import Handlebars from 'handlebars/dist/cjs/handlebars'

catamphetamine إذا كان لديك حل جيد لهذه المشكلة ، const Handlebars = require('handlebars') في NodeJS والإعدادات الحالية مع الإصدارات القديمة من حزمة الويب تعمل.

حول "لكنهم يتجاهلون ويتجاهلون":

مشكلة المقاود هي أنه لا يوجد الكثير من المتعاونين وفي الوقت الحالي ، بقدر ما أستطيع أن أرى ، أنا الوحيد النشط. حسنًا ، أكثر أو أقل نشاطًا. الساعة 23:26 الآن وهذا هو الوقت الذي أحضر فيه عادةً للعمل في مشاريعي الخاصة ، لأن لدي عائلة تعمل في النهار وهوايات أخرى.

لذلك عندما تكتب "ومع ذلك هم يتجاهلون ويتجاهلون" ، لا يوجد الكثير من "هم". يكاد يكون من المؤكد أنه لا يوجد "هم" يتقاضون رواتبهم مقابل العمل في هذا المشروع. أنا أساعد الناس ، لأنه من الممتع التحدث إلى الناس ولأن حل المشكلات وإصلاح الأخطاء وكتابة الاختبارات أمر ممتع. لأنني أستخدم المقاود بنفسي في مشروعين ، ولأنه من الجيد الوقوف في ضوء المسرح من وقت لآخر. لكني لا أشعر أنه من واجبي القيام بذلك. لذلك أختار القضايا التي أحبها ، ومعظمها سريع وواضح.

لذا ، إذا كنت تستخدم المقاود ولديك مشكلة ولن يقوم أحد بحلها ، فربما يجب أن تحاول المساهمة في حل بنفسك.

سأعيد فتح المشكلة رغم ذلك ، لأنه لا يبدو أنه تم حلها.

لأنه من الجيد الوقوف في ضوء المسرح من وقت لآخر.

أنا أفعل مصادر مفتوحة للمتعة أيضًا ، وإن لم تكن شائعة مثل هذه المكتبة.
وأيضًا لسطر أو سطرين في سيرتي الذاتية. يساعد في الحصول على وظيفة أفضل.
يمكنني أن أرى أنك لا تجني الكثير من الأرباح منه بدلاً من مجرد الاستمتاع لأنه ليس مشروعك من الناحية الفنية ، مثل @ nknapp / handlebars.js
أنت تحتفظ به ويحصل wycats على كل الائتمان ونجوم github بقدر ما ينتقل شريط URL.
حسنًا ، على الأقل الآن نعلم أن هذا المشروع لم يعد يتم صيانته بنشاط بعد الآن.
لا يزال ، يتم استخدامه في العديد من الأماكن (بما في ذلك القديم) ، على ما أعتقد.
على سبيل المثال ، أطلقت SendGrid مؤخرًا "قوالب قابلة للتخصيص" باستخدام هذه اللغة handlebars .
https://sendgrid.com/blog/how-to-use-sendgrids-dynamic-templates-for-your-transactional-emails/
https://github.com/sendgrid/sendgrid-nodejs/issues/221

بالنسبة للحل المحتمل ، سيكون تقسيم الحزمة إلى handlebars و handlebars/register كما فعل Babel مع babel و babel/register .
يقومون فقط بتثبيت الخطاف require() عند تنفيذ import 'babel/register' .
سيكون هذا تغييرًا جذريًا لإصدار رئيسي آخر ولكن يمكنني أن أرى أنه على الأرجح لن يكون هناك مثل هذا الإصدار.
يمكن أيضًا إنشاء ملف في الجذر يسمى شيء مثل core.js ( module.exports = require('handlebars/dist/cjs/handlebars') ) ثم يحتاج مستخدمو Webpack إلى handlebars/core بدلاً من handlebars/dist/cjs/handlebars (مع سطر في التمهيدي).
منشئ Webpack هو أيضًا من ألمانيا.

على أي حال ، يعمل import Handlebars from 'handlebars/dist/cjs/handlebars' وأعتقد أنك لست بحاجة إلى تغيير أي شيء في المكتبة ، ربما فقط أضف سطرًا من الوثائق إلى README الذي يستخدم لـ Webpack import Handlebars from 'handlebars/dist/cjs/handlebars' بدلاً من الاستيراد المعتاد.

بالمناسبة ، لم أشير إليك تحديدًا لأنك لم تترك تعليقًا سلبيًا من قبل في هذه المسألة.
كنت أشير إلى methodbox وتعليقه :

يبدو أنه مشكلة في Webpack وليس المقاود.

و rafde وتعليقه :

يبدو أن هناك مشكلة في الإعداد لأنه لا يوجد أي شخص آخر لديه هذه المشكلة

لم يزعم تعليقك أن Webpack كان "خاطئًا" أو أي شيء ، لذا لا توجد كلمات خاطئة من جانبك:

يمكنني إلقاء نظرة إذا قام أي شخص بإعداد نموذج بسيط لمشروع يعيد إنتاج المشكلة. لا وعود بخصوص "متى" ، على الرغم من ...

لم تقل أن "Webpack يفعل ذلك بشكل خاطئ ، أغلق المشكلة" لذا فإن تعليقاتك لا بأس بها.

تضمين التغريدة
على أي حال ، import Handlebars from 'handlebars/dist/cjs/handlebars' يعمل بشكل جيد وأعتقد أنك لست بحاجة إلى تغيير أي شيء في المكتبة.
ربما فقط أضف سطرًا إلى README يقول "إذا كنت تستخدم Webpack ، فحينئذٍ import Handlebars from 'handlebars/dist/cjs/handlebars' بدلاً من import Handlebars from 'handlebars' .
import Handlebars from 'handlebars/dist/cjs/handlebars' جيد وهو يعمل.

import Handlebars from 'handlebars/dist/cjs/handlebars

عملت بالنسبة لي اعتبارا من هذا التعليق.

أتفق مع catamphetamine بالرغم من ذلك.

التوثيق الأفضل يستحق الكثير ولن يقتل أي شخص لإضافة هذا السطر إلى صفحة التثبيت .

كلنا نبني أشياء عظيمة ونريد أن يستخدمها الناس.

لكن خمن ماذا ، إذا كانت الوثائق سيئة ... وكذلك المشروع لأنه لا أحد غيرك ستكون قادرًا على فهمه.

وتذكر ... يخاف الناس مما لا يفهمونه.

-نهي الصراخ-

مع ذلك أنا أقدر جهودك في المكتبة.
غالبًا ما يكون كونك مطورًا مفتوح المصدر بمثابة رحلة نكران للجميل ومؤلمة مع القليل جدًا من المكافآت.

في الواقع ، أنا لا أحاول جعل الناس يستخدمون المقاود. أنا فقط أحاول مساعدة الناس الذين قرروا بالفعل استخدامه.

أقوم حاليًا بإنشاء موقع توثيق جديد (كلما بقي لي بعض الوقت) وسأقوم بتضمينه هناك.

يجب حلها في # 1102

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات