sensui7

前端坑: node-sass

  •  
  •   sensui7 · May 16, 2017 · 17370 views
    This topic created in 3283 days ago, the information mentioned may be changed or developed.

    提起 node-sass, 很多人一把泪,. 之前用 npm, 我用 cnpm, 或者终端代理安装.

    这回环境换成 win+yarn,

    1. cmd 开代理我是不会 用了传说中的 node_sass/install.js 的变量, 指向 cnpm 包的地址, url 没问题, 死活提示 404.

    2. 于是还是开全局代理.

    3. build 时提示 python 找不到, 就在环境变量中, 你找不到 , 手工指定

    yarn config python2 c:\python2\python2.exe
    
    1. 最后, yarn 没有 rebulid, 有一个
    yarn install --force
    

    不够折腾的... 我想用 linux.

    22 replies    2017-05-18 22:09:18 +08:00
    371657110
        1
    371657110  
       May 16, 2017   ❤️ 1
    SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass
    一直用这个.没毛病
    sensui7
        2
    sensui7  
    OP
       May 16, 2017
    @371657110
    我没实验这个, 我用的
    set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ & node node_modules/node-sass..../install.js

    一直提示找不到
    371657110
        3
    371657110  
       May 16, 2017
    @sensui7 我是整一句打到 terminal 里面的..可以替换成 yarn..
    sensui7
        4
    sensui7  
    OP
       May 16, 2017
    @371657110 是的, 但我之前是给 node-sass 的 build 文件 install.js 指定的变量, 单独这样就不用下载包了.

    顺便补充一下, yarn config python2 c:\python2\python2.exe 加上-g
    cyio
        5
    cyio  
       May 16, 2017
    在 node-sass 安装上花的时间,想想就后悔,深坑,替代品太多了,能离多远离多远,自己绝不主动用
    SourceMan
        6
    SourceMan  
       May 16, 2017
    你用的 Windows 吧?
    smallpath
        7
    smallpath  
       May 16, 2017
    有机会安 node-gyp 的话, 你可以再经历一次更反人类的体验
    NeoJane
        8
    NeoJane  
       May 16, 2017
    直接 npm 走代理,没有压力
    sammo
        9
    sammo  
       May 16, 2017 via iPhone
    指定老版本即可
    arfaWong
        10
    arfaWong  
       May 16, 2017
    cnpm 用起来想想就怕 😑😑😑
    fhefh
        11
    fhefh  
       May 16, 2017
    昨天遇到过 我用 yarn 安装的就好了
    hxsf
        12
    hxsf  
       May 16, 2017   ❤️ 1
    1. 这不是 node 的问题

    2. 这只能怪墙

    3. node-sass 有 pre-build 好的,会从 github 拉,还是墙的问题

    4. 淘宝有 node-sass 的 pre-build 镜像

    5. node-sass 的源代码 中写到

    function getBinaryUrl() {
    var site = getArgument('--sass-binary-site') ||
    process.env.SASS_BINARY_SITE ||
    process.env.npm_config_sass_binary_site ||
    (pkg.nodeSassConfig && pkg.nodeSassConfig.binarySite) ||
    'https://github.com/sass/node-sass/releases/download';

    return [site, 'v' + pkg.version, getBinaryName()].join('/');
    }

    很容易就可以排除你为什么 404 的问题。比如 site 的末尾有 /的情况下,拼接出来的路径是不是会有两个 /,如果是,那两个 /会不会导致问题出现?

    node-gyp 在 windows 上需要 vs 这个比较麻烦,确实可以黑一把,什么时候支持 gcc 就好了。



    总结: 墙的问题。
    371657110
        13
    371657110  
       May 18, 2017
    如果没有历史原因.用 postcss 的 nextcss 挺好的.
    sensui7
        14
    sensui7  
    OP
       May 18, 2017
    @hxsf 你分析的很好, 但是都是我们知道的东西, 而且并不都是墙的问题, 最重要的是有解决办法吗?

    我主贴中贴的方法并不彻底, python2 的问题用 yarn config 解决不了, 还有 SASS_BINARY_SITE 的问题, 我已经找到了一劳永逸而且很简单的方法, 以后按 node-sass 和普通包一样了.

    不过感觉 v2 大神太多, 以后还是发在自己博客吧.
    hxsf
        15
    hxsf  
       May 18, 2017
    @sensui7 #14

    好,那请问,
    1. 你 2 楼中提到的 `node node_modules/node-sass..../install.js` 中,node_modules 中 node-sass 文件夹哪里来的,你使用别的工具下载完了放进去的?如果是,你有记得安装它的依赖么?我猜你说的 `一直提示找不到` 是找不到 node-sass/...install.js 所需要的依赖吧。

    2. 你 4 楼中提到的 `yarn config set python2 c:\python2\python2.exe` 又是什么操作?
    node-gyp 文档中明确提到了:
    如果你电脑中 python2 不在 path 中,请使用 `npm config set python /path/to/python2.7`
    config 的键是 python 不是 python2

    3. node-sass 因为是个需要 gyp 的模块,作者已经提供了 pre-build, 如果网络质量好的情况下,可以直接下载到编译好的,而无需进行本地的从源码构建

    4. 承认 node-gyp 在 window 环境下很难配置。

    5. 另外,cmd 不走 代理,不过 yarn/npm 可以配置代理:
    yarn config http-proxy=http://127.0.0.1:port
    yarn config https-proxy=http://127.0.0.1:port
    一句是 http 代理,一句是 https 代理。
    sensui7
        16
    sensui7  
    OP
       May 18, 2017
    @hxsf

    我严重怀疑你到底用 npm 或者 yarn 安装过 node-sass 吗? 你要是安装过就知道 install.js 是从包仓库下载的. 只是 build 时需要翻墙, 你安装包翻什么墙?
    这里没人提 node-gyp 的问题.

    cmd 不走代理, 好新鲜.连调侃都看不出来.
    hxsf
        17
    hxsf  
       May 18, 2017
    没人提 node-gyp 的问题?
    `yarn config python2 c:\python2\python2.exe` 敢问你这句设置的是什么?


    另外

    http://photo.weibo.com/2164689294/wbphotos/large/mid/4108813374744262/pid/8106898egy1ffpnsyr95dg20na0gx4qp
    hxsf
        18
    hxsf  
       May 18, 2017
    @hxsf #17 补图

    https://ooo.0o0.ooo/2017/05/18/591d6e9d128bc.gif
    sensui7
        19
    sensui7  
    OP
       May 18, 2017
    @hxsf
    你这测的是什么?? 你 npm 安装时用的缓存 binary, 没有下载过程 yarn 安装时你又没缓存, 当然下载不了.

    它出错信息是 python2 not found , 我以为变量是 python2
    hxsf
        20
    hxsf  
       May 18, 2017
    你 npm 安装时用的缓存的包(这个有毛病么?网络没问题,重新下载和缓存的有区别么),没有缓存的 binary,很明显的看到从 淘宝镜像下载的。

    然后我把 SASS_BINARY_SITE 的环境变量删了。

    使用 yarn 安装,很明显的看到 yarn 是从 github 下载的 binary。而且安装成功了。并没有失败。

    另外,node 只在使用 node-gyp 编译需要 gyp 的包的情况下,windows 系统下,才会要求 python2,make,vs。

    你一直“我以为”,“都知道”

    你不说清楚你知道什么,你做了什么。就来质疑 “你能解决问题么”

    我也不知道你知道什么,不知道什么,我能怎么办,我也很绝望啊,我只能把你可能不知道的都说一遍。
    sensui7
        21
    sensui7  
    OP
       May 18, 2017
    @hxsf
    这是你的截图

    很明显, 你的 binary 是从本地缓存读取的, 你那个 yarn 下载确实是从 github 下载的, 但只能说明翻墙有效, 这里讨论的是绕过墙. 翻墙还有什么好说的.

    至于 node-gyp, 我并没有单独配置过 node-gyp, 不过我电脑上有 c++ build toos 和 python2, 我以前安装 rust 环境安装了.
    现在能 build 成功. 我的问题已经都解决了.

    我不知道你在测什么, 你要是测 SASS_BINARY_SITE , 别翻墙, 清缓存, 你现在 npm 用的缓存, yarn 是翻墙下的, 你要是测 build, 你这也没 build 过程.

    从你之前问 install.js 哪来的, 说明你根本不了解这个包安装过程.

    唉, 有句话叫, 人之患, 在好为人师. 我不知道的东西多了, 你要能解答我还真感谢你. 浪费了半天精力说了一大堆, 全不在正题上. 谦虚点没什么坏处, 树叶有篆工.

    今天心情不好, 不然也不会跟你挣无意义的口舌之辩.
    hxsf
        22
    hxsf  
       May 18, 2017
    @sensui7 #21

    npm 的缓存是我录了两遍的问题。缓存也是从 SASS_BINARY_SITE 缓存的啊,衣你所愿,
    https://ooo.0o0.ooo/2017/05/18/591da4d205ea2.gif
    这是清缓存后的。

    我从未要测 build 的过程,而是一直在试图讲清楚 直接使用 prebuild 包,而无需安装 node-gyp

    你说 `从你之前问 install.js 哪来的, 说明你根本不了解这个包安装过程.`

    这是因为,你说 ·你直接 node node_modules/node-sass/..../install.js 报找不到`,但是你又没说你这个 node_modules/node-sass 文件夹怎么来的。

    如果是通过 npm 安装的,当 npm 安装失败的时候,他会删掉这个文件夹。所以我会猜测是不是你下载了源码放到了这个目录(可能导致 node-sass 的依赖没有被安装)。

    当你 安装 node-sass 的时候

    1. npm 通过 registry (通常是 https://registry.npmjs.org/)去下载这个包及其依赖(递归下载所有依赖),
    2. 如果 1 中没有发生 404,根据 npm 定义的 `install, postinstall: Run AFTER the package is installed.`,所以 node-sass 安装好了后会执行 定义好的 scripts/install.js,这个文件里编写了 去 github 或者 镜像站下载 预先编译好的 二进制文件

    3. 依然是根据 npm 规定的, `install`完了之后会执行 `postinstall`,这个指向 scripts/build.js 这个文件的作用是 测试之前下的二进制文件可用的,如果不可用或者压根没下载下来,就调用 node-gyp 去走源码构建。

    我说的有哪里不对的还请指出?

    你一开始的不成功是不是因为上面过程的问题?也请说明。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1174 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 17:40 · PVG 01:40 · LAX 10:40 · JFK 13:40
    ♥ Do have faith in what you're doing.