웹 패키지에서 생성된 스크립트를 가져오는 데 실패했습니다.

5326 단어 html-minifier

묘사

정황


유니버설 리얼리티 프로그램에 템플릿을 만들고 있습니다.
서버 측의 html 출력을 최소화하고 싶습니다.
그래서 npm install --save html-minifier하고 import {minify} from "html-minifier";했어요.
그리고 서버를 구축하고 시작할 때 오류가 발생했습니다.
Error: ENOENT: no such file or directory, lstat 'C:\Users\tintypemolly\workspace\react-boilerplate\lib'
    at Error (native)
    at Object.fs.lstatSync (fs.js:982:18)
    at Object.realpathSync (fs.js:1647:19)
    at C:\Users\tintypemolly\workspace\react-boilerplate\build\~\html-minifier\~\uglify-js\tools\node.js:23:1
    at Array.map (native)
    at Object.<anonymous> (C:\Users\tintypemolly\workspace\react-boilerplate\build\~\html-minifier\~\uglify-js\tools\node.js:22:1)
    at __webpack_require__ (C:\Users\tintypemolly\workspace\react-boilerplate\build\webpack:\webpack\bootstrap fb83bf644d298bef2a7c:19:1)
    at Object.<anonymous> (C:\Users\tintypemolly\workspace\react-boilerplate\build\~\html-minifier\src\htmlminifier.js:8:1)
    at __webpack_require__ (C:\Users\tintypemolly\workspace\react-boilerplate\build\webpack:\webpack\bootstrap fb83bf644d298bef2a7c:19:1)
    at Object.<anonymous> (C:\Users\tintypemolly\workspace\react-boilerplate\build\webpack:\server.js:7:1)
Windows 10과 MacOS Sierra에서 이것을 실행합니다.
node 버전은 6.6.0,npm 버전은 3.10.8입니다.
이것은 두 기계에서 모두 발생할 것이다.
오류가 발생한 곳은 이 줄이다.
https://github.com/TintypeMolly/react-boilerplate/blob/fail/html-minifier/src/server.js#L7import {minify} from "html-minifier";

어떻게 번식합니까

git clone https://github.com/TintypeMolly/react-boilerplate.git
git reset --hard origin/fail/html-minifier
cd react-boilerplate
npm install
npm start
npm startnpm run build로 교체한 다음 node build/server.js로 교체할 수 있습니다.
전자는 발전 모델이고 후자는 생산 모델이다.
이 두 가지 상황에서 모두 같은 오류가 발생할 수 있다.

왜 이런 상황이 발생했습니까?


나는 환매 협의에 의존하는 uglify-js가 다음과 같은 조작을 하고 있음을 발견했다.
var FILES = exports.FILES = [
    "../lib/utils.js",
    "../lib/ast.js",
    "../lib/parse.js",
    "../lib/transform.js",
    "../lib/scope.js",
    "../lib/output.js",
    "../lib/compress.js",
    "../lib/sourcemap.js",
    "../lib/mozilla-ast.js",
    "../lib/propmangle.js",
    "./exports.js",
].map(function(file){
    return fs.realpathSync(path.join(path.dirname(__filename), file));
});
나는 server.js를 사용하여 프로젝트를 구축할 때 이 코드들은 webpack 출력 파일로 포장된다고 생각한다.webpack로 프로젝트를 구축할 때 출력은 파일입니다.uglify-js에 대해 path.dirname(__filename)uglify-js 원본 디렉터리를 가리킨다.
그러나 내 프로젝트에 포장되면 /path/to/project/build/server.js 더 이상 아무것도 의미하지 않는다.
이것은 단지 내 프로젝트의 생성 출력 디렉터리이기 때문에 마지막으로Error: ENOENT: no such file or directory이것은 html-minifier 해결할 수 있는 문제입니까, 아니면 제가 uglify-js 또는 webpack에 문제를 만들어야 합니까?

토론 #1

이 문제에 대한 상세한 설명에 감사드립니다.
따라서, 만약 제가 정확하게 이해한다면, 브라우저에서 후자를 사용하지 않고, 이 노드에서 실행하기 위해 webpack 와 의존항에서 html-minifier 을 사용하려고 시도하고 있습니다.js 환경?만약 이렇다면, html-minifieruglify-js 모두 browserify 이 용례에 사용될 것입니다. here 에서 부품을 얻을 수 있습니다.

토론 #2

총괄적으로 말하자면, 당신이 특정한 용례를 원래대로 일하고 싶다면webpack에 문제를 제출하여 그들이 당신을 도와 해결하도록 해야 한다.

토론 #셋

So if I understand correctly, you are trying to use webpack on html-minifier and its dependencies in order to use the latter within a browser as opposed to running in native Node.js environment?


아니오, 서버 쪽 (html-minifier 에서 node 을 사용하여 http 요청에 대한 http 응답을 최소화하고 싶습니다.클라이언트에서 이걸 사용하지 않습니다.
나는 browserify가 이런 문제를 어떻게 처리하는지 연구해야 한다고 생각한다. webpack도 비슷한 문제가 있기를 바란다.
고맙습니다.

토론 #4

@TintypeMolly 이 문제를 해결할 방법을 생각해 냈습니까?

토론 #5

@acusti는 불가능합니다.다른 축소 라이브러리를 사용합니다.

토론 #6

나는 같은 문제에 부딪혔다.나는 현재 웹 패키지를 사용하는 프로젝트가 브라우저 ify보다 훨씬 많다고 생각한다.안타깝게도 이 미니들은 사용할 수 없다.
실제로 문제는 웹 패키지가 아니라 미니필드/uglify에 있다.그것은 단지 편의를 위해 fs 패키지를 필요로 한다.즉, uglify의 조작은 fs가 필요하지 않고'우아한'코드만 만드는 데 사용된다.minifier는 @Alexlasl의 fork를 사용하기 때문에, 이것은 문제를 제출하는 정확한 항목이라고 생각합니다.
나는 이 모듈을 사용하는 것이 몇 줄의 코드를 절약하는 우아한 코드를 사용하는 것보다 더 중요하다고 생각한다.나도 같은 문제가 있다.
웹 패키지를 사용하여 SSR에 react 프로그램을 만들었습니다. HTML을 동적으로 축소하려고 시도하고 있지만 성공하지 못했습니다.

토론 #7

나는 마운트

토론 #8

null-loader 파일의 경로에서 main를 사용하여 이 문제를 해결했다.
나는 다음과 같이 덧붙였다.
rules: [
  // ... some rules
  {
    test: path.resolve(__dirname, 'node_modules/uglify-js/tools/node.js'),
    loader: 'null-loader',
  },
  // ...some more rules
]
내 홈페이지 설정에 들어가세요.
나는 이것이 uglify-js 자체의 문제가 아니라는 것에 동의하지만, 나는 이것이 해결 방안이라고 생각한다.아마도 이것은 html-minifier 파일이 main의 맨 윗부분 디렉터리에 없는 문제일 것이다.

좋은 웹페이지 즐겨찾기